MySQLµÄË÷ÒýÓÅ»¯·ÖÎö(Ò»)

Ò»¡¢SQL·ÖÎö

ÐÔÄÜϽµ¡¢SQLÂý¡¢Ö´ÐÐʱ¼ä³¤¡¢µÈ´ýʱ¼ä³¤

  • ²éѯÓï¾äдµÄ²î
  • Ë÷ÒýʧЧ¹ØÁª²éѯ̫¶àjoin(Éè¼ÆÈ±ÏÝ)
    • µ¥ÖµË÷Òý£ºÔÚuser±íÖиønameÊôÐÔ´´½¨Ë÷Òý£¬create index idx_name on user(name);
    • ¸´ºÏË÷Òý£ºÔÚuser±íÖиøname¡¢emailÊôÐÔ´´½¨Ë÷Òý£¬create index idx_name_email on user(name,email);
  • ·þÎñÆ÷µ÷Óż°¸÷¸ö²ÎÊýÉèÖÃ(»º³å¡¢Ïß³ÌÊýµÈ)

¶þ£¬join²éѯ

1£¬SQLÖ´ÐÐ˳Ðò

¡¡¡¡a£©ÊÖдSQL

    

¡¡¡¡b£©»ú¶Á

   

¡¡¡¡c£©×ܽá

  

2£¬JOIN²éѯ

¡¡¡¡

a£©½¨±íÓï¾ä

CREATE TABLE tbl_dept(
    id INT(11) NOT NULL AUTO_INCREMENT,
    deptName VARCHAR(30) DEFAULT NULL,
    locAdd VARCHAR(40) DEFAULT NULL,
    PRIMARY KEY(id)
)ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

CREATE TABLE tbl_emp (
    id INT(11) NOT NULL AUTO_INCREMENT,
    NAME VARCHAR(20) DEFAULT NULL,
    deptId INT(11) DEFAULT NULL,
    PRIMARY KEY (id),
    KEY fk_dept_Id (deptId)
    #CONSTRAINT 'fk_dept_Id' foreign key ('deptId') references 'tbl_dept'('Id')
)ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

INSERT INTO tbl_dept(deptName,locAdd) VALUES('RD',11);
INSERT INTO tbl_dept(deptName,locAdd) VALUES('HR',12);
INSERT INTO tbl_dept(deptName,locAdd) VALUES('MK',13);
INSERT INTO tbl_dept(deptName,locAdd) VALUES('MIS',14);
INSERT INTO tbl_dept(deptName,locAdd) VALUES('FD',15);

INSERT INTO tbl_emp(NAME,deptId) VALUES('z3',1);
INSERT INTO tbl_emp(NAME,deptId) VALUES('z4',1);
INSERT INTO tbl_emp(NAME,deptId) VALUES('z5',1);
INSERT INTO tbl_emp(NAME,deptId) VALUES('w5',2);
INSERT INTO tbl_emp(NAME,deptId) VALUES('w6',2);
INSERT INTO tbl_emp(NAME,deptId) VALUES('s7',3);
INSERT INTO tbl_emp(NAME,deptId) VALUES('s8',4);
INSERT INTO tbl_emp(NAME,deptId) VALUES('s9',51);
View Code

b£©Âú×ãÌõ¼þµÄjoinÓï¾ä

#×óÁ¬½Ó
SELECT * FROM tbl_dept t1 LEFT JOIN tbl_emp t2 on t1.id = t2.deptId;
#ÓÒÁ¬½Ó
SELECT * FROM tbl_dept t1 RIGHT JOIN tbl_emp t2 on t1.id = t2.deptId;
#ÄÚÁ¬½Ó(½»¼¯)
SELECT * FROM tbl_dept t1 INNER JOIN tbl_emp t2 on t1.id = t2.deptId;
#×óÁ¬½Ó(ֻȡA¶ÀÓеÄ)
SELECT * FROM tbl_dept t1 LEFT JOIN tbl_emp t2 on t1.id = t2.deptId WHERE t2.deptId is NULL;
#ÓÒÁ¬½Ó(ֻȡB¶ÀÓеÄ)
SELECT * FROM tbl_dept t1 RIGHT JOIN tbl_emp t2 on t1.id = t2.deptId WHERE t1.id is NULL; 
#AºÍB¾ùÓÐ
SELECT * FROM tbl_dept t1 LEFT JOIN tbl_emp t2 on t1.id = t2.deptId
UNION 
SELECT * FROM tbl_dept t1 RIGHT JOIN tbl_emp t2 on t1.id = t2.deptId;
#AºÍB¾ùÊǶÀÓÐ
SELECT * FROM tbl_dept t1 LEFT JOIN tbl_emp t2 on t1.id = t2.deptId WHERE t2.deptId is NULL
UNION
SELECT * FROM tbl_dept t1 RIGHT JOIN tbl_emp t2 on t1.id = t2.deptId WHERE t1.id is NULL;

Èý¡¢Ë÷Òý

1£¬Ë÷ÒýÊÇʲô

  • Ë÷Òý(Index)ÊǰïÖúMySQL¸ßЧ»ñÈ¡Êý¾ÝµÄÊý¾Ý½á¹¹¡£
  • ÅźÃÐòµÄ¿ìËÙ²éÕÒÊý¾Ý½á¹¹£¬¼´Ë÷Òý = ÅÅÐò + ²éÕÒ
  • Ò»°ãÀ´ËµË÷Òý±¾ÉíÕ¼ÓÃÄÚ´æ¿Õ¼äÒ²ºÜ´ó£¬²»¿ÉÄÜÈ«²¿´æ´¢ÔÚÄÚ´æÖУ¬Òò´ËË÷ÒýÍùÍùÒÔÎļþÐÎʽ´æ´¢ÔÚÓ²ÅÌÉÏ
  • ¾Û¼¯Ë÷Òý£¬´365betÌåÓýÔÚÏߪË÷Òý£¬¸²¸ÇË÷Òý£¬¸´ºÏË÷Òý£¬Ç°×ºË÷Òý£¬Î¨Ò»Ë÷ÒýĬÈ϶¼ÊÇʹÓÃB+Ê÷Ë÷Òý£¬Í³³ÆË÷Òý¡£µ±È»£¬³ýÁËB+Ê÷ÕâÖÖÀàÐ͵ÄË÷ÒýÖ®Í⣬»¹ÓйþÏ£Ë÷Òý(hash index)µÈ¡£

2£¬Ë÷ÒýÔ­Àí

3£¬Ë÷ÒýÓÅÁÓÊÆ

a)Ë÷ÒýµÄÓÅÊÆ

  • Ë÷ÒýÄÜÌá¸ßÊý¾Ý¼ìË÷µÄЧÂÊ£¬½µµÍÊý¾Ý¿âµÄIO³É±¾
  • ͨ¹ý´´½¨Î¨Ò»ÐÔË÷Òý£¬¿ÉÒÔ±£Ö¤Êý¾Ý¿â±íÖÐÿһÐÐÊý¾ÝµÄΨһÐÔ
  • ÔÚʹÓ÷Ö×éºÍÅÅÐò×Ӿ佸ÐÐÊý¾Ý¼ìË÷ʱ£¬Í¬Ñù¿ÉÒÔÏÔÖø¼õÉÙ²éѯÖзÖ×éºÍÅÅÐòµÄʱ¼ä
  • ¼ÓËÙÁ½¸ö±íÖ®¼äµÄÁ¬½Ó£¬Ò»°ãÔÚÍâ¼üÉÏ´´½¨Ë÷Òý

b)ÁÓÊÆ

  • ʵ¼ÊÉÏË÷ÒýÒ²ÊÇÒ»ÕÅ±í£¬¸Ã±í±£´æÁËÖ÷¼üºÍË÷Òý×ֶΣ¬²¢Ö¸ÏòʵÌå±íµÄ¼Ç¼£¬365betÌåÓýÔÚÏßË÷ÒýÁÐÒ²ÊÇÒªÕ¼ÓÿռäµÄ
  • ËäÈ»Ë÷Òý´ó´óÌá¸ßÁ˲éѯËÙ¶È£¬Í¬Ê±È´Ò²»á½µµÍ¸üбíµÄËÙ¶È£¬Èç¶Ô±íinsert¡¢updateºÍdelete¡£ÒòΪ¸üбíʱ£¬²»½öÒª±£´æÊý¾Ý£¬»¹Òª±£´æÒ»ÏÂË÷ÒýÎļþ¡£
  • Ë÷ÒýÖ»ÊÇÌá¸ßЧÂʵÄÒ»¸öÒòËØ£¬Èç¹ûÄãµÄMySQLÓдóÊý¾ÝÁ¿µÄ±í£¬¾ÍÐèÒª»¨Ê±¼äÑо¿½¨Á¢ÓÅÐãµÄË÷Òý£¬»òÓÅ»¯²éѯÓï¾ä

4£¬MySQLË÷Òý·ÖÀà

  1. ÆÕͨË÷Òý£ºÊÇ×î»ù±¾µÄË÷Òý£¬ËüûÓÐÈκÎÏÞÖÆ£¬¼´Ò»¸öË÷ÒýÖ»°üº¬µ¥¸öÁУ¬Ò»¸ö±í¿ÉÒÔÓжà¸öµ¥ÁÐË÷Òý£»½¨ÒéÒ»ÕűíË÷Òý²»Òª³¬¹ý5¸ö£¬ÓÅÏÈ¿¼ÂǸ´ºÏË÷Òý
  2. ΨһË÷Òý£ºÓëÇ°ÃæµÄÆÕͨË÷ÒýÀàËÆ£¬²»Í¬µÄ¾ÍÊÇ£ºË÷ÒýÁеÄÖµ±ØÐëΨһ£¬µ«ÔÊÐíÓпÕÖµ¡£Èç¹ûÊÇ×éºÏË÷Òý£¬ÔòÁÐÖµµÄ×éºÏ±ØÐëΨһ
  3. Ö÷¼üË÷Òý£ºÊÇ365ÌåÓýÍ¶×¢ÌØÊâµÄΨһË÷Òý£¬Ò»¸ö±íÖ»ÄÜÓÐÒ»¸öÖ÷¼ü£¬²»ÔÊÐíÓпÕÖµ¡£Ò»°ãÊÇÔÚ½¨±íµÄʱºòͬʱ´´½¨Ö÷¼üË÷Òý
  4. ¸´ºÏË÷Òý£ºÖ¸¶à¸ö×Ö¶ÎÉÏ´´½¨µÄË÷Òý£¬Ö»ÓÐÔÚ²éѯÌõ¼þÖÐʹÓÃÁË´´½¨Ë÷ÒýʱµÄµÚÒ»¸ö×ֶΣ¬Ë÷Òý²Å»á±»Ê¹Óá£Ê¹ÓÃ×éºÏË÷Òýʱ×ñÑ­×î×óǰ׺¼¯ºÏ
  5. È«ÎÄË÷Òý£ºÖ÷ÒªÓÃÀ´²éÕÒ365ÌåÓýͶעÖеĹؼü×Ö£¬¶ø²»ÊÇÖ±½ÓÓëË÷ÒýÖеÄÖµÏà±È½Ï¡£fulltextË÷Òý¸úÆäËüË÷Òý´ó²»Ïàͬ£¬Ëü¸üÏñÊÇÒ»¸öËÑË÷ÒýÇæ£¬¶ø²»ÊǼòµ¥µÄwhereÓï¾äµÄ²ÎÊýÆ¥Åä

5£¬MySQLË÷ÒýÓï·¨

  • ´´½¨Ë÷Òý
CREATE [UNIQUE] INDEX  index_name ON mytable(column_name(length));
  • ɾ³ýË÷Òý
DROP INDEX index_name ON mytable;
  • ²é¿´Ë÷Òý(\G365ÌåÓýͶע½«²éѯµ½µÄºáÏò±í¸ñ×ÝÏòÊä³ö£¬·½±ãÔĶÁ)
SHOW INDEX FROM table_name\G
  • ²ÉÓÃalter·½Ê½Ìí¼ÓË÷Òý
#¸ÃÓï¾äÌí¼ÓÒ»¸öÖ÷¼ü£¬ÕâÒâζ×ÅË÷ÒýÖµ±ØÐëÊÇΨһµÄ£¬ÇÒ²»ÄÜΪNULL¡£
ALTER TABLE tbl_name ADD PRIMARY KEY(column_list)
#ÕâÌõÓï¾ä´´½¨Ë÷ÒýµÄÖµ±ØÐëÊÇΨһµÄ£¨³ýÁËNULLÍ⣬NULL¿ÉÄÜ»á³öÏÖ¶à´Î£©
ALTER TABLE tbl_name ADD UNIQUE index_name(column_list)
#Ìí¼ÓÆÕͨË÷Òý£¬Ë÷ÒýÖµ¿É³öÏÖ¶à´Î¡£
ALTER TABLE tbl_name ADD INDEX index_name(column_list)
#¸ÃÓï¾äÖ¸¶¨ÁËË÷ÒýΪFULLTEXT£¬ÓÃÓÚÈ«ÎÄË÷Òý¡£
ALTER TABLE tbl_name ADD FULLTEXT index_name(column_list)

6£¬MySQLµÄË÷Òý½á¹¹

¡¡¡¡ÏêÇé¿É²é¿´£º¶à·²éÕÒÊ÷(B-Tree£¬B+Tree£¬B*Tree)

a£©B-TreeÓëB+TreeµÄÇø±ð

¡¡¡¡B-Ê÷µÄ¹Ø¼ü×Ö£¨Êý¾ÝÏºÍ¼Ç¼ÊÇ·ÅÔÚÒ»ÆðµÄ£» B+Ê÷µÄ·ÇÒ¶×Ó½ÚµãÖÐÖ»Óйؼü×ÖºÍÖ¸ÏòÏÂÒ»¸ö½ÚµãµÄË÷Òý£¬ ¼Ç¼ֻ·ÅÔÚÒ¶×Ó½ÚµãÖС£

b£©B+Tree Óë BTree µÄ²éÕÒ¹ý³Ì

  1. ÔÚ B Ê÷ÖУ¬ Ô½¿¿½ü¸ù½ÚµãµÄ¼Ç¼²éÕÒʱ¼äÔ½¿ì£¬ Ö»ÒªÕÒµ½¹Ø¼ü×Ö¼´¿ÉÈ·¶¨¼Ç¼µÄ´æÔÚ£» ¶ø B+ Ê÷ÖÐ365ÌåÓýͶע¼Ç¼µÄ²éÕÒʱ¼ä»ù±¾ÊÇÒ»ÑùµÄ£¬ ¶¼ÐèÒª´Ó¸ù½Úµã×ßµ½Ò¶×ӽڵ㣬 ¶øÇÒÔÚÒ¶×Ó½ÚµãÖл¹ÒªÔٱȽϹؼü×Ö¡£
  2. ´ÓÕâ¸ö½Ç¶È¿´ B Ê÷µÄÐÔÄܺÃÏñÒª±È B+ Ê÷ºÃ£¬ ¶øÔÚʵ¼ÊÓ¦ÓÃÖÐÈ´ÊÇ B+ Ê÷µÄÐÔÄÜÒªºÃЩ¡£ ÒòΪ B+ Ê÷µÄ·ÇÒ¶×ӽڵ㲻´æ·Åʵ¼ÊµÄÊý¾Ý£¬ÕâÑù365ÌåÓýͶע½Úµã¿ÉÈÝÄɵÄÔªËØ¸öÊý±È B Ê÷¶à£¬ Ê÷¸ß±È B Ê÷С£¬ ÕâÑù´øÀ´µÄºÃ´¦ÊǼõÉÙ´ÅÅÌ·ÃÎÊ´ÎÊý¡£
  3. ¾¡¹Ü B+ Ê÷ÕÒµ½Ò»¸ö¼Ç¼ËùÐèµÄ±È½Ï´ÎÊýÒª±È B Ê÷¶à£¬ µ«ÊÇÒ»´Î´ÅÅÌ·ÃÎʵÄʱ¼äÏ൱ÓڳɰÙÉÏǧ´ÎÄÚ´æ±È½ÏµÄʱ¼ä£¬ Òò´Ëʵ¼ÊÖÐB+ Ê÷µÄÐÔÄÜ¿ÉÄÜ»¹»áºÃЩ£¬ ¶øÇÒ B+Ê÷µÄÒ¶×Ó½ÚµãʹÓÃÖ¸ÕëÁ¬½ÓÔÚÒ»Æð£¬ ·½±ã˳Ðò±éÀú£¨·¶Î§ËÑË÷£©£¬ ÕâÒ²ÊǺܶàÊý¾Ý¿âºÍÎļþϵͳʹÓà B+Ê÷µÄÔµ¹Ê¡£

7£¬´´½¨Ë÷ÒýµÄ³¡¾°

¡¡¡¡a£©ºÎʱÐèÒª´´½¨Ë÷Òý

  1. Ö÷¼ü×Ô¶¯½¨Á¢Î¨Ò»Ë÷Òý
  2. Ƶ·±×÷Ϊ²éѯµÄÌõ¼þµÄ×Ö¶ÎÓ¦¸Ã´´½¨Ë÷Òý
  3. ²éѯÖÐÓëÆäËû±í¹ØÁªµÄ×ֶΣ¬Íâ¼ü¹ØÏµ½¨Á¢Ë÷Òý
  4. Ƶ·±¸üеÄ×ֶβ»Êʺϴ´½¨Ë÷Òý
  5. Where Ìõ¼þÀïÓò»µ½µÄ×ֶβ»´´½¨Ë÷Òý
  6. µ¥¼ä/×éºÏË÷ÒýµÄÑ¡ÔñÎÊÌ⣨Ôڸ߲¢·¢ÏÂÇãÏò´´½¨×éºÏË÷Òý£©
  7. ²éѯÖÐÅÅÐòµÄ×ֶΣ¬ÅÅÐò×Ö¶ÎÈôͨ¹ýË÷ÒýÈ¥·ÃÎʽ«´ó´óÌá¸ßÅÅÐòµÄËÙ¶È
  8. ²éѯÖÐͳ¼Æ»òÕß·Ö×é×Ö¶Î

¡¡¡¡b£©ºÎʱ²»´´½¨Ë÷Òý

  1. ±í¼Ç¼̫ÉÙ
  2. ¾­³£Ôöɾ¸ÄµÄ±í
  3. Êý¾ÝÖØ¸´ÇÒ·Ö²¼Æ½¾ùµÄ±í×ֶΡ£Èç¹ûij¸öÊý¾ÝÁаüº¬Ðí¶àÖØ¸´µÄÄÚÈÝ£¬ÎªËü½¨Á¢Ë÷Òý¾ÍûÓÐÌ«´óµÄʵ¼ÊЧ¹û¡£

ËÄ¡¢Explain

1£¬×÷ÓÃ

  1. ±íµÄ¶Áȡ˳Ðò£¨id ×ֶΣ¬Ô½´óÓÅÏȼ¶Ô½¸ß£©
  2. Êý¾Ý¶ÁÈ¡²Ù×÷µÄ²Ù×÷ÀàÐÍ£¨select_type ×ֶΣ©
  3. ÄÄЩË÷Òý¿ÉÒÔʹÓã¨possible_keys ×ֶΣ©
  4. ÄÄЩË÷Òý±»Êµ¼ÊʹÓã¨keys ×ֶΣ©
  5. ±íÖ®¼äµÄÒýÓã¨ref ×ֶΣ©
  6. ÿÕűíÓжàÉÙÐб»ÓÅ»¯Æ÷²éѯ£¨rows ×ֶΣ©

2£¬id

  • idÏàͬ£¬Ö´ÐÐ˳ÐòÓÉÉÏÖÁÏÂ
  • id²»Í¬£¬Èç¹ûÊÇ×Ó²éѯ£¬idµÄÐòºÅ»áµÝÔö£¬idÖµÔ½´óÓÅÏȼ¶Ô½¸ß£¬Ô½Ïȱ»Ö´ÐÐ
  • idÏàͬ²»Í¬£¬Í¬Ê±´æÔÚ£ºidÈç¹ûÏàͬ£¬¿ÉÒÔÈÏΪÊÇÒ»×飬´ÓÉÏÍùÏÂ˳ÐòÖ´ÐУ»ÔÚËùÓÐ×éÖУ¬idÖµÔ½´ó£¬ÓÅÏȼ¶Ô½¸ß£¬Ô½ÏÈÖ´ÐУ»ÑÜÉú=DERIVED

       

2£¬select_type

¡¡¡¡select_type£º²éѯµÄÀàÐÍ£¬Ö÷ÒªÓÃÓÚÇø±ðÆÕͨ²éѯ¡¢ÁªºÏ²éѯ¡¢×Ó²éѯµÈ¸´ÔÓ²éѯ

  1. SIMPLE£º¼òµ¥µÄselect²éѯ£¬²éѯÖв»°üº¬×Ó²éѯ»òÕßUNION
  2. PRIMARY£º²éѯÖÐÈô°üº¬Èκθ´ÔÓµÄ×Ó²¿·Ö£¬×îÍâ²ã²éѯÔò±»±ê¼ÇΪPRIMARY
  3. SUBQUERY£ºÔÚSELECT»òÕßWHEREÁбíÖаüº¬ÁË×Ó²éѯ
  4. DERIVED£ºÔÚFROMÁбíÖаüº¬µÄ×Ó²éѯ±»±ê¼ÇΪDERIVED£¨ÑÜÉú£©MySQL»áµÝ¹éÖ´ÐÐÕâЩ×Ó²éѯ£¬°Ñ½á¹û·ÅÔÚÁÙʱ±íÀï
  5. UNION£ºÈôµÚ¶þ¸öSELECT³öÏÖÔÚUNIONÖ®ºó£¬Ôò±»±ê¼ÇΪUNION£»ÈôUNION°üº¬ÔÚFROM×Ó¾äµÄ×Ó²éѯÖУ¬Íâ²ãSELECT½«±»±ê¼ÇΪ£ºDERIVED
  6. UNION RESULT£º´ÓUNION±í»ñÈ¡½á¹ûµÄSELECT

3£¬table

¡¡¡¡table£ºÏÔʾÕâÒ»ÐеÄÊý¾ÝÊǹØÓÚÄÄÕűíµÄ

4£¬type

¡¡¡¡type£º·ÃÎÊÀàÐÍÅÅÁУ¬ÏÔʾ²éѯʹÓÃÁ˺ÎÖÖÀàÐÍ£¬ÆäÖдӺõ½»µÒÀ´ÎÊÇ£ºsystem>const>eq_ref>ref>fultext>ref_or_null>index_merge>unique_subquery>index_subquery>range>index>ALL¡£ÆäÖУ¬Ïà±È±È½ÏÖØÒªµÄÖ¸±êΪ£ºsystem > const > eq_ref > ref > range > index > ALL

  • system£º±íÖ»ÓÐÒ»ÐмǼ£¨µÈÓÚϵͳ±í£©£¬ÕâÊÇconstÀàÐ͵ÄÌØÀý£¬Æ½Ê±²»»á³öÏÖ£¬Õâ¸öÒ²¿ÉÒÔºöÂÔ²»¼Æ
  • const£º365ÌåÓýͶעͨ¹ýË÷ÒýÒ»´Î¾ÍÄÜÕÒµ½ÁË£¬constÓÃÓڱȽÏprimary key»òÕßuniqueË÷Òý¡£ÒòΪֻƥÅäÒ»ÐÐÊý¾Ý£¬365betÌåÓýÔÚÏߺܿ졣È罫Ö÷¼üÖÃÓÚwhereÁбíÖУ¬MySQL¾ÍÄܽ«¸Ã²éѯת»»ÎªÒ»¸ö³£Á¿¡¡¡¡

¡¡¡¡

  • eq_ref£ºÎ¨Ò»ÐÔË÷Òý£¬¶ÔÓÚ365ÌåÓýͶעË÷Òý½¨£¬±íÖÐÖ»ÓÐÒ»Ìõ¼Ç¼Óë֮ƥÅ䣬³£¼ûÓÚÖ÷¼ü»òΨһË÷ÒýɨÃè

¡¡¡¡

  • ref£º·ÇΨһË÷ÒýɨÃ裬·µ»ØÆ¥Åäij¸öµ¥¶ÀÖµµÄËùÓÐÐС£±¾ÖÊÉÏÒ²ÊÇ365ÌåÓýͶעË÷Òý·ÃÎÊ£¬Ëü·µ»ØËùÓÐÆ¥Åäij¸öµ¥¶ÀÖµµÄÐС£²»¹ý£¬Ëü¿ÉÄÜÕÒµ½¶à¸ö·ûºÏÌõ¼þµÄÐУ¬365betÌåÓýÔÚÏßËüÓ¦¸ÃÊôÓÚ²éÕÒºÍɨÃèµÄ»ìºÏÌå

¡¡¡¡

  • range£ºÖ»¼ìË÷¸ø¶¨·¶Î§µÄÐУ¬Ê¹ÓÃÒ»¸öË÷ÒýÀ´Ñ¡ÔñÐС£keyÁÐÏÔʾʹÓÃÁËÄĸöË÷Òý£¬Ò»°ã¾ÍÊÇÄãµÄwhereÓï¾äÖгöÏÖÁËbetween¡¢<¡¢>¡¢inµÈµÄ²éѯ£¬ÕâÖÖ·¶Î§É¨ÃèË÷Òý±ÈÈ«±íɨÃèÒªºÃ£¬ÒòΪËûÖ»ÐèÒª¿ªÊ¼Ë÷ÒýµÄijһ¸öµã£¬¶ø½áÊøÓÚÁíÒ»µã£¬²»ÓÃɨÃèÈ«²¿Ë÷Òý

¡¡¡¡

  • index£ºFull Index Scan£¬indexÓëALLÇø±ðΪindexÀàÐÍÖ»±éÀúË÷ÒýÊ÷¡£Õâͨ³£±ÈALL¿ì£¬ÒòΪË÷ÒýÎļþͨ³£±ÈÊý¾ÝÎļþС¡£(Ò²¾ÍÊÇ˵ËäÈ»allºÍindex¶¼ÊǶÁÈ«±í£¬µ«indexÊÇ´ÓË÷ÒýÖжÁÈ¡µÄ£¬¶øallÊÇ´ÓÓ²ÅÌÊý¾Ý¿âÎļþÖжÁµÄ)

¡¡¡¡

  • ALL£ºFull Table Scan£¬½«±éÀúÈ«±íÒÔÕÒµ½Æ¥ÅäµÄÐÐ(È«±íɨÃè)

¡¡¡¡

5£¬possible_keys

  • ÏÔʾ¿ÉÄÜÓ¦ÓÃÔÚÕâÕűíÉϵÄË÷Òý£¬Ò»¸ö»ò¶à¸ö
  • Èô²éÑ¯Éæ¼°µÄ×Ö¶ÎÉÏ´æÔÚË÷Òý£¬Ôò¸ÃË÷Òý½«±»Áгö£¬µ«²»Ò»¶¨±»²éѯʵ¼ÊʹÓÃ

6£¬key

  • ʵ¼ÊʹÓõÄË÷Òý£¬Èç¹ûΪnull£¬ÔòûÓÐʹÓÃË÷Òý
  • Èô²éѯÖÐʹÓÃÁ˸²¸ÇË÷Òý£¬Ôò¸ÃË÷Òý½ö³öÏÖÔÚkeyÁбíÖÐ

¡¡¡¡

7£¬key_len

  • 365ÌåÓýͶעË÷ÒýÖÐʹÓõÄ×Ö½ÚÊý£¬¿Éͨ¹ý¸ÃÁмÆËã²éѯÖÐʹÓõÄË÷ÒýµÄ³¤¶È¡£ÔÚ²»Ëðʧ¾«È·ÐÔµÄÇé¿öÏ£¬³¤¶ÈÔ½¶ÌÔ½ºÃ
  • key_lenÏÔʾµÄֵΪË÷Òý×î´ó¿ÉÄܳ¤¶È£¬²¢·Çʵ¼ÊʹÓó¤¶È£¬¼´key_lenÊǸù¾Ý±í¶¨Ò弯Ëã¶øµÃ£¬²»ÊÇͨ¹ý±íÄÚ¼ìË÷³öµÄ

 ¡¡¡¡

8£¬ref

  • ÏÔʾË÷ÒýÄÄÒ»Áб»Ê¹ÓÃÁË£¬Èç¹û¿ÉÄܵϰ£¬×îºÃÊÇÒ»¸ö³£Êý¡£ÄÄЩÁлò³£Á¿±»ÓÃÓÚ²éÕÒË÷ÒýÁÐÉϵÄÖµ
  • ÓÉkey_len¿ÉÖªt1±íµÄµÄË÷Òýidx_col1_col2±»³ä·ÖʹÓã¬t1±íµÄcol1Æ¥Åät2±íµÄcol1£¬t1±íµÄcol2Æ¥ÅäÒ»¸ö³£Á¿('ac')

¡¡¡¡

9£¬rows

¡¡¡¡¸ù¾Ý±íͳ¼ÆÐÅÏ¢¼°Ë÷ÒýÑ¡ÓÃÇé¿ö£¬´óÖ¹ÀËã³öÕÒµ½ËùÐèµÄ¼Ç¼ËùÐèÒª¶ÁÈ¡µÄÐÐÊý

¡¡¡¡

10£¬Extra

a£©Using filesort(ÎļþÅÅÐò)

  • ÔÚʹÓÃorder by¹Ø¼ü×ÖµÄʱºò£¬Èç¹û´ýÅÅÐòµÄÄÚÈݲ»ÄÜÓÉËùʹÓõÄË÷ÒýÖ±½ÓÍê³ÉÅÅÐòµÄ»°£¬ÄÇômysqlÓпÉÄܾÍÒª½øÐÐÎļþÅÅÐò
  • filesortÊÇͨ¹ýÏàÓ¦µÄÅÅÐòËã·¨,½«È¡µÃµÄÊý¾ÝÔÚÄÚ´æÖнøÐÐÅÅÐò
  • MySQLÐèÒª½«Êý¾ÝÔÚÄÚ´æÖнøÐÐÅÅÐò£¬ËùʹÓõÄÄÚ´æÇøÓòÒ²¾ÍÊÇ365betÌåÓýÔÚÏßÃÇͨ¹ýsort_buffer_size ϵͳ±äÁ¿ËùÉèÖõÄÅÅÐòÇø

¡¡¡¡

b£©Using temporary(´´½¨ÁÙʱ±í)

  • using temporaryÒ»°ã³öÏÖÔÚ¶àÕűíµÄÊý¾ÝÐèÒªÅÅÐòµÄÇé¿öÏÂ. MySQl»áÏÈʹÓÃusing temporary±£´æÁÙʱÊý¾Ý, È»ºóÔÙÔÚÁÙʱ±íÉÏʹÓÃfilesort½øÐÐÅÅÐò
  • Èç¹ûÓÐORDER BY×Ó¾äºÍÒ»¸ö²»Í¬µÄGROUP BY×Ó¾ä, »òÕßÈç¹ûORDER BY»òGROUP BYÖеÄ×ֶζ¼À´×ÔÆäËûµÄ±í¶ø·ÇÁ¬½Ó˳ÐòÖеĵÚÒ»¸ö±íµÄ»°, ¾Í»á´´½¨Ò»¸öÁÙʱ±íÁË¡£
  • MySQLÊ×ÏÈ´´½¨heapÒýÇæµÄÁÙʱ±í, Èç¹ûÁÙʱµÄÊý¾Ý¹ý¶à, ³¬¹ýmax_heap_table_sizeÅäÖõĴóС, »á×Ô¶¯°ÑÁÙʱ±íת»»³ÉMyISAMÒýÇæµÄ±íÀ´Ê¹ÓÃ

¡¡¡¡

c£©Using indexing(¸²¸ÇË÷Òý)

  • 365ÌåÓýͶעÏàÓ¦µÄselect²Ù×÷ÖÐʹÓÃÁ˸²¸ÇË÷Òý£¨Coveing Index£©£¬±ÜÃâ·ÃÎÊÁ˱íµÄÊý¾ÝÐС£

  • Èç¹ûͬʱ³öÏÖusing where£¬±íÃ÷Ë÷Òý±»ÓÃÀ´Ö´ÐÐË÷Òý¼üÖµµÄ²éÕÒ

  • Èç¹ûûÓÐͬʱ³öÏÖusing where£¬±íÃ÷Ë÷ÒýÓÃÀ´¶ÁÈ¡Êý¾Ý¶ø·ÇÖ´ÐвéÕÒ¶¯×÷¡¡¡¡

¡¡¡¡

¸²¸ÇË÷Òý:
¡¡¡¡Àí½â·½Ê½Ò»£º¾ÍÊÇselectµÄÊý¾ÝÁÐÖ»ÓôÓË÷ÒýÖоÍÄܹ»È¡µÃ£¬²»±Ø¶ÁÈ¡Êý¾ÝÐУ¬MySQL¿ÉÒÔÀûÓÃË÷Òý·µ»ØselectÁбíÖеÄ×ֶΣ¬¶ø²»±Ø¸ù¾ÝË÷ÒýÔٴζÁÈ¡Êý¾ÝÎļþ£¬»»¾ä»°Ëµ²éѯÁÐÒª±»Ëù½¨µÄË÷Òý¸²¸Ç¡£ ¡¡¡¡Àí½â·½Ê½¶þ£ºË÷ÒýÊǸßЧÕÒµ½ÐеÄÒ»¸ö·½·¨£¬µ«ÊÇÒ»°ãÊý¾Ý¿âÒ²ÄÜʹÓÃË÷ÒýÕÒµ½Ò»¸öÁеÄÊý¾Ý£¬Òò´ËËü²»±Ø¶ÁÈ¡Õû¸öÐС£±Ï¾¹Ë÷ÒýÒ¶×Ó½Úµã´æ´¢ÁËËüÃÇË÷ÒýµÄÊý¾Ý£»µ±ÄÜͨ¹ý¶ÁÈ¡Ë÷Òý¾Í¿ÉÒԵõ½ÏëÒªµÄÊý¾Ý£¬ÄǾͲ»ÐèÒª¶ÁÈ¡ÐÐÁË¡£Ò»¸öË÷Òý°üº¬ÁË£¨»ò¸²¸ÇÁË£©Âú×ã²éѯ½á¹ûµÄÊý¾Ý¾Í½Ð×ö¸²¸ÇË÷Òý¡£ ¡¡¡¡×¢Ò⣺Èç¹ûҪʹÓø²¸ÇË÷Òý£¬Ò»¶¨Òª×¢ÒâselectÁбíÖÐֻȡ³öÐèÒªµÄÁУ¬²»¿Éselect
* £¬ÒòΪÈç¹û½«ËùÓÐ×Ö¶365betÌåÓýÔÚÏß»Æð×öË÷Òý»áµ¼ÖÂË÷ÒýÎļþ¹ý´ó£¬²éѯÐÔÄÜϽµ¡£

d£©Using where

¡¡¡¡365ÌåÓýͶעʹÓÃÁËwhere¹ýÂË

e£©Using join buffer

¡¡¡¡365ÌåÓýͶעʹÓÃÁËÁ¬½Ó»º´æ

f£©impossible where

¡¡¡¡where×Ó¾äµÄÖµ×ÜÊÇfalse£¬²»ÄÜÓÃÀ´»ñÈ¡ÈκÎÔª×é

¡¡¡¡

g£©select tables optimized away

¡¡¡¡ÔÚûÓÐGROUP BY×Ó¾äµÄÇé¿öÏ£¬»ùÓÚË÷ÒýÓÅ»¯MIN/MAX²Ù×÷»òÕß¶ÔÓÚMyISAM´æ´¢ÒýÇæÓÅ»¯COUNT(*)²Ù×÷£¬²»±ØµÈµ½Ö´Ðн׶ÎÔÙ½øÐмÆË㣬²éѯִÐмƻ®Éú³ÉµÄ½×¶Î¼´Íê³ÉÓÅ»¯¡£

¡¡¡¡

h£©distinct

¡¡¡¡ÓÅ»¯distinct£¬ÔÚÕÒµ½µÚһƥÅäµÄÔª×éºó¼´Í£Ö¹ÕÒͬÑùÖµµÄ¹¤×÷

 

posted @ 2021-01-16 21:39  MXCФijij  ÔĶÁ(187)  ÆÀÂÛ(0±à¼­  ÊÕ²Ø