dzÎöSQL ServerÈý´óËã·¨µÄI/O³É±¾
1. Nested Loop Join(ǶÌ×Ñ»·Áª½á)
Ëã·¨£º
Æä˼·Ï൱µÄ¼òµ¥ºÍÖ±½Ó£º¶ÔÓÚ¹ØÏµRµÄÿ¸öÔª×é r ½«ÆäÓë¹ØÏµSµÄÿ¸öÔª×é s ÔÚJOINÌõ¼þµÄ×Ö¶ÎÉÏÖ±½Ó±È½Ï²¢É¸Ñ¡³ö·ûºÏÌõ¼þµÄÔª×顣д³Éα´úÂë¾ÍÊÇ£º
´ú¼Û£º
±»Áª½áµÄ±íËù´¦ÄÚ²ã»òÍâ²ãµÄ˳Ðò¶Ô´ÅÅÌI/O¿ªÏúÓÐ×ŷdz£ÖØÒªµÄÓ°Ïì¡£¶øCPU¿ªÏúÏà¶ÔÀ´ËµÓ°Ïì½ÏС£¬Ö÷ÒªÊÇÔª×é¶ÁÈëÄÚ´æÒÔºó(in-memory)µÄ¿ªÏú£¬ÊÇ O (n * m)
¶ÔÓÚI/O¿ªÏú£¬¸ù¾Ý page-at-a-time µÄǰÌáÌõ¼þ£¬I/O cost = M + M * N£¬
·ÒëһϾÍÊÇ I/OµÄ¿ªÏú = ¶ÁÈ¡MÒ³µÄI/O¿ªÏú + M´Î¶ÁÈ¡NÒ³µÄI/O¿ªÏú¡£
2. Sort-Merge Join (ÅÅÐòºÏ²¢Áª½á)
Nested LoopÒ»°ãÔÚÁ½¸ö¼¯ºÏ¶¼ºÜ´óµÄÇé¿öÏÂЧÂʾÍÏ൱²îÁË£¬¶øSort-MergeÔÚÕâÖÖÇé¿öϾͱÈËüÒª¸ßЧ²»ÉÙ£¬ÓÈÆäÊǵ±Á½¸ö¼¯ºÏµÄJOIN×Ö¶ÎÉ϶¼Óоۼ¯Ë÷Òý(clustered index)´æÔÚʱ£¬Sort-MergeÐÔÄܽ«´ïµ½×îºÃ¡£
Ëã·¨£º
»ù±¾Ë¼Â·Ò²ºÜ¼òµ¥(¸´Ï°Ò»ÏÂÊý¾Ý½á¹¹Öеĺϲ¢ÅÅÐò°É)£¬Ö÷ÒªÓÐÁ½¸ö²½Ö裺
a.°´JOIN×ֶνøÐÐÅÅÐò
b.¶ÔÁ½×éÒÑÅÅÐò¼¯ºÏ½øÐкϲ¢ÅÅÐò£¬´ÓÀ´Ô´¶Ë¸÷×ÔÈ¡µÃÊý¾ÝÁкó¼ÓÒԱȽÏ(ÐèÒª¸ù¾ÝÊÇ·ñÔÚJOIN×Ö¶ÎÓÐÖØ¸´Öµ×öÌØÊâµÄ“·ÖÇø”´¦Àí)
´ú¼Û£º(Ö÷ÒªÊÇI/O¿ªÏú)
ÓÐÁ½¸öÒòËØ×óÓÒSort-MergeµÄ¿ªÏú£ºJOIN×Ö¶ÎÊÇ·ñÒÑÅÅÐò ÒÔ¼° JOIN×Ö¶ÎÉϵÄÖØ¸´ÖµÓжàÉÙ¡£
¡ô×îºÃÇé¿öÏÂ(Á½Áж¼ÒÑÅÅÐòÇÒÖÁÉÙÓÐÒ»ÁÐûÓÐÖØ¸´Öµ)£ºO (n + m) Ö»ÐèÒª¶ÔÁ½¸ö¼¯ºÏ¸÷ɨÃèÒ»±é¡££¨ÕâÀïµÄm£¬nÈç¹û¶¼ÄÜÓõ½Ë÷ÒýÄǾ͸üºÃÁË£©
¡ô×î²îÇé¿öÏÂ(Á½Áж¼Î´ÅÅÐòÇÒÁ½ÁÐÉϵÄËùÓÐÖµ¶¼Ïàͬ)£ºO (n * log n + m * log m + n * m) Á½´ÎÅÅÐòÒÔ¼°Ò»´ÎÈ«²¿Ôª×é¼äµÄµÑ¿¨¶û³Ë»ý
3. Hash Join (¹þÏ£Áª½á)
Hash JoinÔÚ±¾ÖÊÉÏÀàËÆÓÚÁ½Áж¼ÓÐÖØ¸´ÖµÊ±µÄSort-MergeµÄ´¦Àí˼Ïë——·ÖÇø(patitioning)¡£µ«ËüÃÇÒ²ÓÐÇø±ð£ºHash Joinͨ¹ý¹þÏ£À´·ÖÇø(ÿһ¸öͰ¾ÍÊÇÒ»¸ö·ÖÇø)¶øSort-Mergeͨ¹ýÅÅÐòÀ´·ÖÇø(ÿһ¸öÖØ¸´Öµ¾ÍÊÇÒ»¸ö·ÖÇø)¡£
ÖµµÃ×¢ÒâµÄÊÇ£¬Hash JoinÓëÉÏÊöÁ½ÖÖËã·¨Ö®¼äµÄ½Ï´óÇø±ðͬʱҲÊÇÒ»¸ö½Ï´óÏÞÖÆÊÇËüÖ»ÄÜÓ¦ÓÃÓÚµÈÖµÁª½á(equality join)£¬ÕâÖ÷ÒªÊÇÓÉÓÚ¹þÏ£º¯Êý¼°ÆäͰµÄÈ·¶¨ÐÔ¼°ÎÞÐòÐÔËùµ¼Öµġ£
Ëã·¨£º
»ù±¾µÄHash JoinËã·¨ÓÉÒÔÏÂÁ½²½×é³É£º
ͬnested loop£¬ÔÚÖ´Ðмƻ®ÖÐbuild inputλÓÚÉÏ·½£¬probe inputλÓÚÏ·½¡£
hash join²Ù×÷·ÖÁ½¸ö½×¶ÎÍê³É£ºbuild£¨¹¹Ô죩½×¶ÎºÍprobe£¨Ì½²â£©½×¶Î¡£
a.Build Input Phase£º »ùÓÚJOIN×ֶΣ¬Ê¹ÓùþÏ£º¯Êýh2Ϊ½ÏСµÄS¼¯ºÏ¹¹½¨ÄÚ´æÖÐ(in-memory)µÄ¹þÏ£±í£¬Ïàͬ¼üÖµµÄÒÔlinked list×é³ÉÒ»¸ö
Ïà¹ØÎĵµ£º
1.update a set a.nickname=b.nickname from tab1 a,tab2 b where a.username=b.username
2.Update student_score set
student_score.level=level_about.level from
level_about where student.score
between level_about.start_score and level_about.end_score ......
ËäȻ˵ASP.NETÊôÓÚ°²È«ÐԸߵĽű¾ÓïÑÔ,µ«ÊÇÒ²¾³£¿´µ½ASP.NETÍøÕ¾ÓÉÓÚ¹ýÂ˲»ÑÏÔì³É×¢Éä.ÓÉÓÚASP.NET»ù±¾ÉÏÅäºÏMMSQLÊý¾Ý¿â¼ÜÉè Èç¹ûȨÏÞ¹ý´óµÄ»°ºÜÈÝÒ×±»¹¥»÷. ÔÙÕßÔÚÍøÂçÉÏÕÒ²»µ½ºÃµÄASP.NET·À×¢Éä½Å±¾,ËùÒÔ¾Í×Ô¼ºÐ´Á˸ö. ÔÚÕâÀï¹²Ïí³öÀ´Ö¼ÔÚÈóÌÐòÔ±Ãâ³ýSQL×¢ÈëµÄÀ§ÈÅ.
ÎÒдÁËÁ½¸ö°æ±¾,VB.NETºÍC#°æ±¾·½±ã²»Í¬³ÌÐò¼äʹÓà ......
sql serverµÄ money ÀàÐÍÆäʵ¾ÍÊÇСÊýÀàÐÍ decimal £¬ÎÒ²»Ï²»¶ÓÃËü£¬ÒòΪÓÐÒ»´Îʲô¹¤¾ßÉú³É£¬·¢ÏÖËü×Ô¶¯°ÑmoneyÀàÐÍת»»³ÉÁËdecimalÀàÐÍÁË£¬ÓëÆäÈÃËüת£¬»¹²»Èç×Ô¼ºÉè¼ÆÊý¾Ý¿âʱ½«»õ±ÒÀàÐÍ×Ö¶ÎÉèÖÃΪ decimal ÀàÐͲ»¾ÍµÃÁË£¬·ÏÄÇʸÉÂ ×Ö½ÚÊý ³¤¶È(СÊýµãǰ.СÊýµãºó) ......
ͨ¹ýË÷Òý£¬¿ÉÒÔ¼Ó¿ìÊý¾ÝµÄ²éѯËٶȺͼõÉÙϵͳµÄÏìӦʱ¼ä£»¿ÉÒÔʹ±íºÍ±íÖ®¼äµÄÁ¬½ÓËٶȼӿ졣µ«ÊÇ£¬²»ÊÇÔÚÈκÎʱºòʹÓÃË÷Òý¶¼Äܹ»´ïµ½ÕâÖÖЧ¹û¡£ÈôÔÚ²»Ç¡µ±µÄ³¡ºÏÏ£¬Ê¹ÓÃË÷Òý·´¶ø»áÊÂÓëԸΥ¡£ Ë÷ÒýÊÇÒÔ±íÁÐΪ»ù´¡µÄÊý¾Ý¿â¶ÔÏó¡£Ë÷ÒýÖб£´æ×űíÖÐÅÅÐòµÄË÷ÒýÁÐ
¡¡¡¡
ͨ¹ýË÷Òý£¬¿ÉÒÔ¼Ó¿ìÊý¾ÝµÄ²éѯËٶȺͼõÉÙϵͳµÄÏìӦʱ¼ä£ ......