[À§·Î]
<¿øÀÎ>
3°¡ÁöÀÇ Join ¹®ÀÌ ÀÖÀ½(Merge,Hash,Loop)
¿ÉƼ¸¶ÀÌÁ®°¡ ÆÇ´ÜÇÒ¼öµµ ÀÖÁö¸¸ °³¹ßÀÚ°¡ Data ³»¿ëÀ» º¸°í Á÷Á¢ ¼±ÅÃÇÒ¼öµµ ÀÖÀ½
<SQL¹®>
<Á¶Ä¡ »çÇ×>
Open ÃÊâ±â¿¡´Â Hint ¾øÀÌ SQL ÀÛ¼º (¿ÉƼ¸¶ÀÌÁ®ÀÇ ÆÇ´ÜÀ» ¿ì¼±)
Æ©´×ÀÌ ÇÊ¿äÇÒ °æ¿ì (¿ÉƼ¸¶ÀÌÁ®ÀÇ ÆÇ´ÜÀ» ¹«½Ã, Hint ÁöÁ¤,Loop,Hash,Merge·Î ÁöÁ¤)
<±âŸ>
Áßø ·çÇÁ Á¶ÀÎ(Nested Loop Join) Loop
Áßø ·çÇÁ Á¶ÀÎ(Nested Loop Join)¿¡¼´Â ¿ì¼± Å×À̺í Áß Çϳª¸¦ ½ºÄµÇÕ´Ï´Ù. ÀÌ ¶§ ±× Å×À̺íÀÇ ¸ðµç Çà¿¡ ´ëÇÏ¿© µÎ ¹ø° Å×À̺íÀ» Á¶È¸ÇÏ¿© ÀÏÄ¡µÇ´Â ÇàÀ» °Ë»öÇÕ´Ï´Ù. ÀÌ °æ¿ì¿¡ µÎ Å×À̺íÀ» ¿ÜºÎ(Outer) ÀÔ·Â ¹× ³»ºÎ(Inner) ÀÔ·ÂÀ̶ó°í ºÎ¸¨´Ï´Ù. ¿ÜºÎ(Outer) ÀÔ·ÂÀÇ °¢ °ª¸¶´Ù ³»ºÎ(Inner) ÀÔ·ÂÀ» ½ºÄµÇÏ¿© ÀÏÄ¡ÇÏ´Â °ÍÀ» ã´Â °ÍÀÌ ¹Ù·Î ±âº» ¾Ë°í¸®ÁòÀÔ´Ï´Ù. ³»ºÎ(Inner) ÀԷ¿¡ À妽º°¡ ÀÖÀ¸¸é Á¶È¸¸¦ ÈξÀ È¿°úÀûÀ¸·Î ½ÇÇàÇÒ ¼ö ÀÖ½À´Ï´Ù. À妽º°¡ ÀÖ´Â Áßø ·çÇÁ Á¶ÀÎ(Nested Loop Join)Àº ºÐ¸íÈ÷ À妽º°¡ ¾ø´Â Áßø ·çÇÁ Á¶ÀÎ(Nested Loop Join)º¸´Ù ´õ È¿°úÀûÀÔ´Ï´Ù. ¶ÇÇÑ Å×À̺íÀÌ ÀÏ´ëÀÏ °ü°è¿¡ ÀÖ´Â °æ¿ì ³»ºÎ(Inner) Å×À̺íÀ» ½ºÄµÇÏ´Ù°¡ ¿ÜºÎ(Outer) Å×À̺íÀÇ Çà°ú ÀÏÄ¡ÇÏ´Â ÇàÀ» ãÀ¸¸é ½ºÄµ ÀÛ¾÷À» Á¾·áÇÕ´Ï´Ù.
ºÎµ¿ Á¶°ÇÀÇ Á¶ÀÎÀ» Æ÷ÇÔÇÏ´Â ÀÌ·¯ÇÑ ¹æ¹ýÀ» »ç¿ëÇÏ¿© ¸ðµç Äõ¸®¸¦ ó¸®ÇÒ ¼ö ÀÖ½À´Ï´Ù. (MS³»¿ë http://support.microsoft.com/kb/q197297/)
- Á¶ÀεǴ Å×À̺íµéÀÇ Á¶ÀÎ Ä÷³Áß ¾î´À ÇÑÂÊ Å×ÀÌºí¿¡¸¸ À妽º°¡ Á¸ÀçÇÒ ¶§
- »ç¿ë ¹æ¹ý : ÀûÀº Å×À̺í inner loop join ¸¹Àº Å×À̺í
(Å×ÀÌºí ¼ø¼¸¦ ¹Ù²Ù¸é ¼º´ÉÀÌ ÀúÇϵÊ)
- select * from
sales
st inner loop join
stores
sa
on st.stor_id = sa.stor_id
select * from
stores
st inner loop join
sales
sa
on st.stor_id = sa.stor_id
- Hint¸¦ »ç¿ëÇÏÁö ¾ÊÀ¸¸é ¿ÉƼ¸¶ÀÌÁ®°¡ Å×ÀÌºí ¼ø¼¸¦ °áÁ¤ÇÔ
Çؽà Á¶ÀÎ(Hash Join)
- Á¶ÀÎÀ» Çϱ⿡ ÀûÇÕÇÑ À妽º°¡ Á¸ÀçÇÏÁö ¾ÊÀ» ¶§
Çؽà ÀÏÄ¡¿¡¼´Â ¹Ýº¹ÀûÀÎ ÀÓÀÇ ÃßÃâ ÇÔ¼ö¸¦ »ç¿ëÇÏ¿© ÀÔ·Â ÁßÀÇ Çϳª¿¡ ´ëÇØ Build Input ¸Þ¸ð¸®¿¡ Çؽà Å×À̺íÀ» ÀÛ¼ºÇÕ´Ï´Ù. ±×¸®°í ÀÌ Å×ÀÌºí¿¡ ´Ù¸¥ ÀÔ·Â(Probe Input)°ú ÀÏÄ¡µÇ´Â °ªÀÌ ÀÖ´ÂÁö °Ë»öÇÕ´Ï´Ù. Çؽà Å×À̺íÀº À妽º¿Í °°Àº ±â´ÉÀ» ÇÕ´Ï´Ù. Build InputÀÇ µ¥ÀÌÅÍ´Â ¸Þ¸ð¸®¿¡ ÀúÀåµË´Ï´Ù. ÀÌ ¶§ Build InputÀÇ Å©±â°¡ ¸Þ¸ð¸®¿¡ ¸ÂÁö ¾Ê´Â °æ¿ì ¸Þ¸ð¸®¿¡ ¸ÂÀ» ¶§±îÁö ¹Ýº¹ÀûÀ¸·Î ºÐÇҵ˴ϴÙ. ±×¸®°í ³ª¼ Probe InputÀ» ÇؽÃÇÏ¿© ÀÏÄ¡ÇÏ´Â °ÍÀÌ ÀÖ´ÂÁö °Ë»öÇÕ´Ï´Ù. Áßø ·çÇÁ¿Í´Â ´Þ¸® À妽ºÀÇ À¯¹«°¡ ±×·¸°Ô Áß¿äÇÑ °ÍÀº ¾Æ´Õ´Ï´Ù. Áßø ·çÇÁ¿Í ºñ±³ÇßÀ» ¶§ Çؽà Á¶ÀÎÀº CPU¸¦ ¸¹ÀÌ »ç¿ëÇÏ¸ç »ç¿ë °¡´ÉÇÑ ¸Þ¸ð¸® °ø°£ÀÇ ¿µÇâÀ» ¹Þ½À´Ï´Ù. Çؽà Á¶ÀÎÀº Á¶ÀÎÇÒ Å×À̺íÀÇ Å©±â°¡ ¸¹ÀÌ Â÷À̳ª´Â °æ¿ì ´õ È¿°úÀûÀ¸·Î ÀÛ¿ëÇÕ´Ï´Ù.
Çؽà Á¶Àο¡¼ Build InputÀº ¹Ýº¹ Ƚ¼ö¸¦ °áÁ¤ÇÏ°Ô µÇ´Âµ¥, ÀÌ´Â ÀÔ·ÂÀÌ ¸Þ¸ð¸® Å©±â¿¡ ¸Â°Ô µÇ¸é ºÐÇÒÀ» ¸ØÃ߱⠶§¹®ÀÔ´Ï´Ù. ±×·ìÈ Æ¯¼ºÀÌ Á¶ÀΠƯ¼º°ú ÀÏÄ¡ÇÏ´Â °æ¿ì ´ÜÀÏ Çؽà Á¶ÀÎÀº ±×·ìÈ¿Í Á¶ÀÎÀ» µ¿½Ã¿¡ ¼öÇàÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ Á¶ÀÎÀÇ °á°ú¿¡´Â ¾î¶² ƯÁ¤ ¼ø¼°¡ ÀÖ´Â °ÍÀÌ ¾Æ´Õ´Ï´Ù. ÀÌ·¯ÇÑ À¯ÇüÀÇ Á¶ÀÎÀº ºÎµ¿ Á¶°ÇÀ» ¸¸Á·½Ãų ¼ö´Â ¾ø½À´Ï´Ù.
Á¤·Ä º´ÇÕ Á¶ÀÎ(Sort-Merge Join)
- Á¤·Ä º´ÇÕ(Sort-Merge)¿¡¼´Â ´Ù·®ÀÇ ÀÔ·ÂÀ» Á¤·ÄÇϸé ÃÑ ºñ¿ëÀÌ ¸¹ÀÌ µì´Ï´Ù. º´ÇÕ(Merge) Á¶Àο¡¼´Â Á¶ÀÎ ¿·Î ÀÔ·ÂÀ» Á¤·ÄÇÏ¿© Á¤·ÄÇÑ ½ÖÀ» Çϳª·Î º´ÇÕ(Merge)Çϴµ¥, ÀÌ °úÁ¤¿¡¼ Á¤·ÄÇÑ °á°ú ÁýÇÕ°ú ÀÏÄ¡ÇÏÁö ¾Ê´Â ¿(Column) °ªÀº ¾ø¾Ö ¹ö¸³´Ï´Ù.
ÀÌ ¾Ë°í¸®ÁòÀº ¸ÕÀú ÇÑ ÀÔ·ÂÀ» °Ë»çÇÏ°í ³ª¼ Å©°Å³ª °°Àº Á¶ÀÎ °ªÀ» °¡Áø ÇàÀ» ãÀ» ¶§±îÁö µÎ ¹ø° Á¤·ÄÇÑ ÀÔ·ÂÀ» ½ºÄµÇÕ´Ï´Ù. R1ÀÇ Æ©ÇÃÀ» R2¿¡ ÀÖ´Â ¸ðµç Æ©Çðú ¦À» Áö¾î Á¶ÀΰªÀ» ÀÏÄ¡½Ãŵ´Ï´Ù. R1¿¡ ÀÖ´Â ¸ðµç Æ©Çÿ¡ ´ëÇؼµµ ÀÌ °úÁ¤À» ¹Ýº¹ÇÕ´Ï´Ù.
º´ÇÕ(Merge) Á¶ÀÎÀº µÑ Áß¿¡¼ ´õ ÀÛÀº ÀԷ¸¸ ¸Þ¸ð¸®¿¡ µÎ´Â Çؽà Á¶Àΰú´Â ¹Ý´ë·Î µÎ °³ÀÇ ÀÔ·ÂÀÌ ¸ðµÎ ¸Þ¸ð¸®¿¡ ÀÖ¾î¾ß ÇÕ´Ï´Ù. º´ÇÕ(Merge) Á¶ÀÎÀº ÀÔ·ÂÀÌ ÀÌ¹Ì Á¤·ÄµÇ¾î ÀÖ´Â °æ¿ì ÈξÀ ´õ È¿°úÀûÀÔ´Ï´Ù. ¶ÇÇÑ ÀÌ Á¶ÀÎÀÇ °á°ú´Â Á¶ÀΠƯ¼º¿¡¼ Á¤·ÄµË´Ï´Ù. ÀÌ·¯ÇÑ À¯ÇüÀÇ Á¶ÀÎÀº ºÎµ¿ Á¶°ÇÀ» ¸¸Á·½Ãų ¼ö´Â ¾ø½À´Ï´Ù.