¸ßЧSQL²éѯ֮Ë÷Òý£¨VI)
ÎÒÃÇÏÈ¿´ NestedLoop ºÍ MergeJoin µÄËã·¨£¨ÒÔÏÂΪÒýÓ㬼û RicCC µÄ¡¶ ͨÍùÐÔÄÜÓÅ»¯µÄÌìÌà - µØÓü JOIN ·½·¨ËµÃ÷ ¡· ):
==================================
NestedLoop:
foreach rowA in tableA where tableA.col2=?
{
search rowsB from tableB where tableB.col1=rowA.col1 and tableB.col2=? ;
if(rowsB.Count<=0)
discard rowA ;
else
output rowA and rowsB ;
}
MergeJoin:
Á½¸ö±í¶¼°´ÕÕ¹ØÁª×Ö¶ÎÅÅÐòºÃÖ®ºó£¬ merge join ²Ù×÷´Óÿ¸ö±íȡһÌõ¼Ç¼¿ªÊ¼Æ¥Å䣬Èç¹û·ûºÏ¹ØÁªÌõ¼þ£¬Ôò·ÅÈë½á¹û¼¯ÖУ»·ñÔò£¬½«¹ØÁª×Ö¶ÎÖµ½ÏСµÄ¼Ç¼Åׯú£¬´ÓÕâÌõ¼Ç¼¶ÔÓ¦µÄ±íÖÐÈ¡ÏÂÒ»Ìõ¼Ç¼¼ÌÐø½øÐÐÆ¥Å䣬ֱµ½Õû¸öÑ»·½áÊø¡£
==================================
ÎÒÃÇͨ¹ý×î¼òµ¥µÄÇé¿öÀ´¼ÆËã NestedLoop ºÍ MergeJoin µÄÏûºÄ£º
Á½Õűí A ¡¢ B £¬·Ö±ðÓÐ m ¡¢ n ÐÐÊý¾Ý£¨ m < n £©£¬Õ¼Óûù´¡±íÎïÀí´æ´¢¿Õ¼ä·Ö±ðΪ a ¡¢ b Ò³£¬¾Û¼¯Ë÷ÒýÊ÷·ÇÒ¶½Úµã¶¼ÊÇÁ½²ã£¨Ò»²ã¸ù½Úµã£¬Ò»²ãÖм伶½Úµã£©£¬ A ¡¢ B µÄ¾Û¼¯Ë÷Òý½¨ÔÚ A.col1 ¡¢ B.col1 ÉÏ¡£Ò»Ìõ²éѯÓï¾ä£º
select A.col1, B.col2 from A inner join B where A.col1 = B.col1 ¡£
Ö´ÐÐ NestedLoop ²Ù×÷ £º
A ×÷Ϊ outer input £¬ B ×÷Ϊ inner input ʱ£º A ´øÀ´µÄ IO Ϊ a £»Ã¿´Îͨ¹ý clustered index seek Ö´ÐÐÄÚ²¿Ñ»·£¬»¨·Ñ 3( Ò»¸ö¸ù½Úµã¡¢Ò»¸öÖм伯½áµã¡¢Ò»¸öÒ¶½Úµã¡£µ±È»Ò²¿ÉÄÜÖ±½Ó´Ó¸ù½Úµã¾ÍÄõ½ÒªµÄÊý¾Ý£¬ÎÒÃÇÖ»¿¼ÂÇ×µÄÇé¿ö£©£¬ÕâÑùÖ´ÐÐÕû¸öǶÌ×Ñ»·¹ý³ÌÏûºÄ IO Ϊ a + 3*m ¡£Èç¹û B ×÷Ϊ inner input £¬ A ×÷Ϊ outer input ·ÖÎöÀàËÆ¡£
Ö´ÐÐ MergeJoin :
MergeJoin Òª°Ñ A ¡¢ B Á½Õűí×ö¸ö Scan £¬È»ºó½øÐÐ Merge ²Ù×÷¡£ËùÒÔ A ¡¢ B ·Ö±ð´øÀ´ IO Ϊ a + b ¾ÍÊÇ×ܵÄÂß¼ IO ¿ªÏú¡£
´ÓÉÏÊö·ÖÎöÀ´¿´£¬Èô a + 3*m << a + b £¬¼´ 3*m << b £¬ÄÇô NestedLoop ÐÔÄÜÊǼ«¼ÑµÄ¡£µ±È»£¬ÎÒÃÇ±È½Ï A ±íµÄÐÐºÍ B ±íËùÕ¼Êý¾ÝÒ³´óС¿´ÉÏÈ¥Óеã¿äÕÅ£¬µ«ÊÇÁ¿»¯·ÖÎöȷʵÈç´Ë¡£ÔÚÕâÀÎÒÃÇûÓмÆËã NestedLoop ºÍ MergeJoin ±¾ÉíµÄ cpu ¼ÆË㿪Ïú£¬ÌرðÊǺóÕߣ¬Õⲿ·Ö²¢²»ÄÜÍêÈ«ºöÂÔ£¬µ«ÊÇÒ²À´µÃÓÐÏÞ¡£
OK £¬ÏÖÔÚÎÒÃÇÊÔͼִÐÐʵ¼ÊµÄÓï¾äÑéÖ¤
Ïà¹ØÎĵµ£º
ϵͳ»·¾³£ºWindows 7
Èí¼þ»·¾³£ºVisual C++ 2008 SP1 +SQL Server 2005
±¾´ÎÄ¿µÄ£º±àдһ¸öº½¿Õ¹ÜÀíϵͳ
ÕâÊÇÊý¾Ý¿â¿Î³ÌÉè¼ÆµÄ³É¹û£¬ËäÈ»³É¼¨²»¼Ñ£¬µ«ÊÇ×÷ΪÎÒÓÃVC++ ÒÔÀ´±àдµÄ×î´ó³ÌÐò»¹ÊÇ´«µ½ÍøÉÏ£¬ÒÔ¹©²Î¿¼¡£ÓÃVC++ ×öÊý¾Ý¿âÉè¼Æ²¢²»ÈÝÒ×£¬µ«Ò²²»ÊDz»¿ÉÄÜ¡£ÒÔÏÂÊÇÎҵijÌÐò½çÃæ£¬ºóÃæ ......
ÓÐʱ£¬ ΪÁËÈÃÓ¦ÓóÌÐòÔËÐеøü¿ì£¬Ëù×öµÄÈ«²¿¹¤×÷¾ÍÊÇÔÚÕâÀï»òÄÇÀï×öһЩºÜСµ÷Õû¡£°¡£¬µ«¹Ø¼üÔÚÓÚÈ·¶¨ÈçºÎ½øÐе÷Õû£¡³ÙÔçÄú»áÓöµ½ÕâÖÖÇé¿ö£ºÓ¦ÓóÌÐòÖÐµÄ SQL ²éѯ²»Äܰ´ÕÕÄúÏëÒªµÄ·½Ê½½øÐÐÏìÓ¦¡£ËüҪô²»·µ»ØÊý¾Ý£¬ÒªÃ´ºÄ·ÑµÄʱ¼ä³¤µÃ³öÆæ¡£Èç¹ûËü½µµÍÁ˱¨¸æ»òÄúµÄÆóÒµÓ¦ÓóÌÐòµÄËÙ¶È£¬Óû§±ØÐëµÈ´ýµÄʱ¼ä¹ý³¤£¬ËûÃǾͻá ......
¡¾IT168 ¼¼ÊõÎĵµ¡¿
½éÉÜ
SQL SERVER2005ÌṩÁËÔÚ.NETÖÐ×Ô¶¨Ò庯Êý¡¢´æ´¢¹ý³Ì¡¢¾ÛºÏ¡¢´¥·¢Æ÷ÒÔ¼°ÀàÐ͵ŦÄÜ¡£ÓÚÊÇ£¬ÎÒÃÇ¿ÉÒÔÔÚÊý¾Ý¿âµÄº¯Êý¡¢´æ´¢¹ý³Ì»òÀàÐÍÕûºÏ.NET¶ÔÏó·½·¨µÈ¡£ÔÚ֮ǰµÄһƪÎÄÕ£¬ÎÒÃÇÑÝʾÁËÈçºÎ½«ÕýÔò±í´ïʽ¹¦ÄÜÕûºÏµ½SQL CLRÖС£ÔÚ±¾ÎÄÖУ¬»¹ÊÇÑÝʾÕâÖÖÕûºÏ£¬µ«ÊÇÕâ´ÎÊÇ´ÓSQL CLRÖ ......
ÉÏ»ØÎÒÃÇ˵µ½ÆÀ¹ÀÒ»ÌõÓï¾äÖ´ÐÐЧÂÊÖ÷Òª¿´Âß¼ IO £¨É¶ÊÇÂß¼ IO £¬É¶ÊÇÎïÀí IO ¼ûÁª»úÎĵµ£©£¬Õâ´ÎÎÒÃǼÌÐø¡£
ÎÒÃÇÏÈ˵˵£¬·µ»Ø¶àÐнá¹ûʱ£¬ÎªÊ²Ã´ SQLServer ÓÐʱ»áÑ¡Ôñ index seek £¬ÓÐʱ»áÑ¡Ôñ index scan ¡£
ÒÔ nonclustered index ΪÀý˵Ã÷¡£
ÏñËùÓеÄË÷Òý B Ê÷Ò»Ñù£¬·Ç¾Û¼¯Ë÷ÒýÊ÷Ò²°üÀ¨ÍêÈ«ÓÉË÷ÒýÊý¾Ý×é³ÉµÄ¸ù½ ......