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 ......
ÔÚSQL UPDATEÓï¾äÖУ¬¶Ô»»Á½¸ö±äÁ¿µÄÖµ£¬²»ÐèÒªÁÙʱ±äÁ¿¡£=ÓÒ²àµÄÖµÔÚÕû¸öUPDATEÓï¾äÖж¼ÊÇÒ»Öµģ»ËùÓеĸüÐÂͬʱ·¢Éú£¬¶ø²»ÊÇÒ»¸ö½Ó×ÅÒ»¸ö·¢Éú¡£
ÀýÈ磺
UPDATE offenceTeam
SET goalShooter=wingAttack,
& ......
Ó¦ÓÃʾÀý£º
-- ´´½¨2¸ö²âÊÔ±í
CREATE TABLE [dbo].[Table_2019]([Data] [nchar](2019) NOT NULL)
CREATE TABLE [dbo].[Table_2020]([Data] [nchar](2020) NOT NULL)
go
-- Ìî³äÊý¾Ý
declare @i int
set @i = 0
while(@i < 20)
begin
insert Table_2019(Data) values('')
  ......
¾µäSQLÓï¾ä´óÈ«
ÏÂÁÐÓï¾ä²¿·ÖÊÇMssqlÓï¾ä£¬²»¿ÉÒÔÔÚaccessÖÐʹÓá£
¡¡¡¡SQL·ÖÀࣺ
¡¡¡¡DDL—Êý¾Ý¶¨ÒåÓïÑÔ(CREATE£¬ALTER£¬DROP£¬DECLARE)
¡¡¡¡DML—Êý¾Ý²Ù×ÝÓïÑÔ(SELECT£¬DELETE£¬UPDATE£¬INSERT)
¡¡¡¡DCL—Êý¾Ý¿ØÖÆÓïÑÔ(GRANT£¬REVOKE£¬COMMIT£¬ROLLBACK)
¡¡¡¡Ê×ÏÈ,¼òÒª½éÉÜ»ù´¡Óï¾ä£º
¡¡¡¡1¡¢Ë ......
ÔÚʹÓùý³ÌÖдó¼Ò¾³£Åöµ½Êý¾Ý¿âÈÕÖ¾·Ç³£´óµÄÇé¿ö£¬ÔÚÕâÀï½éÉÜÁËÁ½ÖÖ´¦Àí·½·¨……
¡¡¡¡·½·¨Ò»
¡¡¡¡Ò»°ãÇé¿öÏ£¬SQLÊý¾Ý¿âµÄÊÕËõ²¢²»Äܴܺó³Ì¶ÈÉϼõСÊý¾Ý¿â´óС£¬ÆäÖ÷Òª×÷ÓÃÊÇÊÕËõÈÕÖ¾´óС£¬Ó¦µ±¶¨ÆÚ½øÐд˲Ù×÷ÒÔÃâÊý¾Ý¿âÈÕÖ¾¹ý´ó¡£
¡¡¡¡1¡¢ÉèÖÃÊý¾Ý¿âģʽΪ¼òµ¥Ä£Ê½£º´ò¿ªSQLÆóÒµ¹ÜÀíÆ÷£¬ÔÚ¿ØÖÆÌ¨¸ùÄ ......