ä»æå¼å§å¦ä¹ sqlå°è³ä»ï¼sqlè¯å¥ä¹æ¯åäºå¾å¤ï¼ä½æ¯ä¸ç´é½å¨ä¸æ³¨äºå®ç°åè½ï¼å¾å°å ³æ³¨æçãå·¥ä½ä¸å¸¸å¸¸å¬å°å槽ï¼è¯´æçsqlè¯å¥çæ¯è§¦ç®æå¿ï¼ææå¯ä»¥ç®ç®ååæåå¤åæçï¼ä½æ¯ååéæ©ä¸ä¸ªèæ¶é´çsqlãå æ¤ï¼å¨è¿éç®åèä¸èå¦ä½æé«sqlçæçï¼ä¸å¤§å®¶å ±åè¿æ¥å¦ï½
ç±äºä¸åæ°æ®åºæ¯æçsqlè¯å¥è¿æ¯ä¼æä¸äºå·®å¼ï¼æä¸ææ¶åå°çæ¯åºäºmysqlæ¥è¿è¡çï¼ä½æ¯æ¬æææ³è¿æ¯ææéç¨sqlçå¹³å°éç¨çã
ä¸ãexplainè¯å¥
explainå ³é®åå¯ä»¥æ¨¡æMySQLä¼åå¨æ§è¡SQLè¯å¥ï¼å¯ä»¥å¾å¥½çåæSQLè¯å¥æ表ç»æçæ§è½ç¶é¢ã
explainçç¨æ³ï¼explain+sqlè¯å¥ï¼ä¾å¦ï¼explain select * from securityprice order by `index`
ç»æå¦ä¸ï¼
ç»æå å«12个å段ï¼
1. id //selectæ¥è¯¢çåºåå·ï¼å å«ä¸ç»æ°åï¼è¡¨ç¤ºæ¥è¯¢ä¸æ§è¡selectåå¥ææä½è¡¨ç顺åº
2. select_type //æ¥è¯¢ç±»å
3. table //æ£å¨è®¿é®åªä¸ªè¡¨
4. partitions //å¹é çååº
5. type //访é®çç±»å
6. possible_keys //æ¾ç¤ºå¯è½åºç¨å¨è¿å¼ 表ä¸çç´¢å¼ï¼ä¸ä¸ªæå¤ä¸ªï¼ä½ä¸ä¸å®å®é 使ç¨å°
7. key //å®é 使ç¨å°çç´¢å¼ï¼å¦æ为NULLï¼å没æ使ç¨ç´¢å¼
8. key_len //表示索å¼ä¸ä½¿ç¨çåèæ°ï¼å¯éè¿è¯¥å计ç®æ¥è¯¢ä¸ä½¿ç¨çç´¢å¼çé¿åº¦
9. ref //æ¾ç¤ºç´¢å¼çåªä¸å被使ç¨äºï¼å¦æå¯è½çè¯ï¼æ¯ä¸ä¸ªå¸¸æ°ï¼åªäºåæ常é被ç¨äºæ¥æ¾ç´¢å¼åä¸çå¼
10. rows //æ ¹æ®è¡¨ç»è®¡ä¿¡æ¯åç´¢å¼éç¨æ åµï¼å¤§è´ä¼°ç®åºæ¾å°æéçè®°å½æé读åçè¡æ°
11. filtered //æ¥è¯¢ç表è¡å 表çç¾åæ¯
12. Extra //å å«ä¸éåå¨å ¶å®åä¸æ¾ç¤ºä½ååéè¦çé¢å¤ä¿¡æ¯
å ·ä½explainå段解éå¯ä»¥åèå¦ä¸æç« ï¼
https://segmentfault.com/a/1190000021458117?utm_source=tag-newest
https://blog.csdn.net/why15732625998/article/details/80388236
äºãexplainä¸typeç±»ååæé«sqlæç建议ï¼
å¨explainç»æå段ä¸ï¼å å«âtypeâ表示访é®çç±»åï¼å ¶ä¸å¸¸è§typeç访é®æçå¦ä¸ï¼
NULL>system>const>eq_ref>ref>range>index>ALL
ALLï¼Full Table Scanï¼ MySQLå°éåå ¨è¡¨ä»¥æ¾å°å¹é çè¡ã
index: Full index Scanï¼Indexä¸Allåºå«ï¼indexåªéåç´¢å¼æ ï¼é常æ¯Allå¿«ãå 为索å¼æ件é常æ¯æ°æ®æ件å°ï¼ä¹å°±æ¯è½ç¶allåindexé½æ¯è¯»å ¨è¡¨ï¼ä½indexæ¯ä»ç´¢å¼ä¸è¯»åçï¼èallæ¯ä»ç¡¬ç读çã
range:åªæ£ç´¢ç»å®èå´çè¡ï¼ä½¿ç¨ä¸ä¸ªç´¢å¼æ¥éæ©è¡ï¼keyåæ¾ç¤ºä½¿ç¨äºåªä¸ªç´¢å¼ãä¸è¬å°±æ¯å¨ä½ çwhereè¯å¥ä¸åºç°betweenã<>ãinççæ¥è¯¢ã
ref: éå¯ä¸æ§ç´¢å¼æ«æï¼è¿åå¹é æ个åç¬å¼çææè¡ãæ¬è´¨ä¸ä¹æ¯ä¸ç§ç´¢å¼è®¿é®ï¼è¿åææå¹é æ个åç¬å¼çè¡ã
eq_ref: å¯ä¸æ§ç´¢å¼æ«æï¼å¯¹äºæ¯ä¸ªç´¢å¼é®ï¼è¡¨ä¸åªæä¸æ¡è®°å½ä¸ä¹å¹é ï¼å¸¸è§äºä¸»é®æå¯ä¸ç´¢å¼æ«æã
constãsystem: å½MySQL对æ¥è¯¢æé¨åè¿è¡ä¼åï¼å¹¶è½¬æ¢ä¸ºä¸ä¸ªå¸¸éæ¶ï¼ä½¿ç¨è¿äºç±»å访é®ãå¦å°ä¸»é®ç½®äºwhereå表ä¸ï¼MySQLå°±è½å°è¯¥æ¥è¯¢è½¬æ¢ä¸ºä¸ä¸ªå¸¸éï¼systemæ¯constç±»åçç¹ä¾ï¼å½æ¥è¯¢ç表åªæä¸è¡çæ åµä¸ï¼ä½¿ç¨systemã
NULL: MySQLå¨ä¼åè¿ç¨ä¸å解è¯å¥ï¼æ§è¡æ¶çè³ä¸ç¨è®¿é®è¡¨æç´¢å¼ã
å设ç¨å¦ä¸æ¹å¼å»ºç«è¡¨ï¼
CREATE TABLE `securityprice` (
`index` datetime NOT NULL,
`open` double DEFAULT '0',
`close` double DEFAULT '0',
`high` double DEFAULT '0',
`low` double DEFAULT '0',
`volume` double DEFAULT '0',
`money` double DEFAULT '0',
`stockname` varchar(20) NOT NULL,
PRIMARY KEY (`stockname`,`index`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
ç»åå¦ä¸type访é®æçï¼å¯ä»¥å¾åºsqlè¯å¥ä¸æé«æççä¸äºæå·§å¦ä¸ï¼
1ãåºå°½éé¿å å ¨è¡¨æ«æï¼é¦å åºèèå¨ where å order by æ¶åçåä¸å»ºç«ç´¢å¼ã
1ï¼å¦æwhereä¸çå 容æ¯primary keyï¼é£ä¹type 为constã
explain select `open`,`close` from securityprice where `index`='2020-05-18' and stockname='000004.XSHE';
2ï¼ä½æ¯å¦æwhereä¸ä¸æ¯ç´¢å¼ï¼é£ä¹type为allã
explain select `open`,`close` from securityprice where `index`='2019-05-17';
3ï¼ä¸ºè¡¨å ä¸ç´¢å¼ï¼
ALTER TABLE `securityprice` ADD INDEX index_index ( `index` ) ;
å¯ä»¥çå°æ¤å»type为ref
2ãåºå°½éé¿å å¨ where åå¥ä¸ä½¿ç¨!=æ<>æä½ç¬¦ï¼å¦åå°å¼ææ¾å¼ä½¿ç¨ç´¢å¼èè¿è¡å ¨è¡¨æ«æã
1ï¼å¦æè¿ç¨äº<>æä½ç¬¦
explain select `open`,`close` from securityprice where `index`<>'2020-05-18'
3ãåºå°½éé¿å å¨ where åå¥ä¸ä½¿ç¨ or æ¥è¿æ¥æ¡ä»¶
explain select `open`,`close` from securityprice where `index`='2020-05-18' or `index`='2020-05-17'
å¦æä¿®æ¹æunionè¯å¥ï¼é£ä¹ä¸¤ä¸ªselectæ¥è¯¢åå¯ä»¥ä½¿ç¨ç´¢å¼ï¼ç±»å为refã
explain select `open`,`close` from securityprice where `index`='2020-05-18' union select `open`,`close` from securityprice where `index`='2020-05-18'
æ¤å¤ï¼å代orçæ¹æ³è¿æinãbetween andãexistã
å¦ææ¯è¿ç»åéï¼å¯ç¨between andã
ä¸è¬æ åµä¸ï¼existæç好äºin ï¼inæç好äºorã
5ãå®ä¹1个å¤åç´¢å¼ï¼ç´¢å¼ç顺åºæ¯åºå®çï¼ä½æ¥è¯¢sqlè¯å¥ä¸whereåçè¯å¥ä¼åå¨ä¼è¿è¡èªå¨ä¼åã
ä¹å°±æ¯è¯´ï¼
select * from securityprice where `index`='2020-05-18' and stockname='000004.XSHE' and `open`=20 ä¸whereè¯å¥åçå 容顺åºæ¯æ å½±åçï¼ä¼åå¨ä¼è¿è¡ä¼åã
ä½æ¯å¦æ建ç«å¤åç´¢å¼ï¼å¦ä¸ç´¢å¼1ã2ã3æ¯å®å ¨ä¸åçç´¢å¼ï¼
ç´¢å¼1:a1ï¼a2ï¼a3
ç´¢å¼2:a3ï¼a1ï¼a2
ç´¢å¼3:a2ï¼a3ï¼a1
6ã并ä¸æ¯ææç´¢å¼å¯¹æ¥è¯¢é½ææï¼SQLæ¯æ ¹æ®è¡¨ä¸æ°æ®æ¥è¿è¡æ¥è¯¢ä¼åçï¼å½ç´¢å¼åæ大éæ°æ®éå¤æ¶ï¼SQLæ¥è¯¢å¯è½ä¸ä¼å»å©ç¨ç´¢å¼ï¼å¦ä¸è¡¨ä¸æå段sexï¼maleãfemaleå ä¹åä¸åï¼é£ä¹å³ä½¿å¨sexä¸å»ºäºç´¢å¼ä¹å¯¹æ¥è¯¢æçèµ·ä¸äºä½ç¨ã
7ãé¿å ä½¿ç¨ select * from t ï¼ç¨å ·ä½çå段å表代æ¿â*âï¼ä¸è¦è¿åç¨ä¸å°çä»»ä½å段ãè¿ä¸ç¹é常ç®åï¼ä½ççæ éåselect * ã
8ãç´¢å¼å¹¶ä¸æ¯è¶å¤è¶å¥½ï¼ç´¢å¼åºç¶å¯ä»¥æé«ç¸åºç select çæçï¼ä½åæ¶ä¹éä½äº insert å update çæçï¼å 为 insert æ update æ¶æå¯è½ä¼é建索å¼ï¼æ以ææ ·å»ºç´¢å¼éè¦æ éèèï¼è§å ·ä½æ åµèå®ã
9ãå°½é使ç¨æ°ååå段ï¼è¥åªå«æ°å¼ä¿¡æ¯çå段尽éä¸è¦è®¾è®¡ä¸ºå符åï¼è¿ä¼éä½æ¥è¯¢åè¿æ¥çæ§è½ï¼å¹¶ä¼å¢å åå¨å¼éãè¿æ¯å 为å¼æå¨å¤çæ¥è¯¢åè¿æ¥æ¶ä¼é个æ¯è¾å符串ä¸æ¯ä¸ä¸ªå符ï¼è对äºæ°ååèè¨åªéè¦æ¯è¾ä¸æ¬¡å°±å¤äºã
10ãå°½å¯è½çä½¿ç¨ varchar/nvarchar ä»£æ¿ char/nchar ï¼å 为é¦å åé¿å段åå¨ç©ºé´å°ï¼å¯ä»¥èçåå¨ç©ºé´ï¼å ¶æ¬¡å¯¹äºæ¥è¯¢æ¥è¯´ï¼å¨ä¸ä¸ªç¸å¯¹è¾å°çå段å æç´¢æçæ¾ç¶è¦é«äºã