怎么查看MySQL語(yǔ)句有沒(méi)有用到索引?
通過(guò)explain,如以下例子:
EXPLAIN SELECT * FROM employees.titles WHERE emp_no='10001' AND title='Senior Engineer' AND from_date='1986-06-26';
id | select_type | table | partitions | type | possible_keys | key | key_len | ref | filtered | rows | Extra |
---|---|---|---|---|---|---|---|---|---|---|---|
1 | SIMPLE | titles | null | const | PRIMARY | PRIMARY | 59 | const,const,const | 10 | 1 |
- id:在?個(gè)?的查詢(xún)語(yǔ)句中每個(gè)SELECT關(guān)鍵字都對(duì)應(yīng)?個(gè)唯?的id ,如explain select * from s1 where id = (select id from s1 where name = 'egon1');第一個(gè)select的id是1,第二個(gè)select的id是2。有時(shí)候會(huì)出現(xiàn)兩個(gè)select,但是id卻都是1,這是因?yàn)閮?yōu)化器把子查詢(xún)變成了連接查詢(xún) 。
- select_type:select關(guān)鍵字對(duì)應(yīng)的那個(gè)查詢(xún)的類(lèi)型,如SIMPLE,PRIMARY,SUBQUERY,DEPENDENT,SNION 。
- table:每個(gè)查詢(xún)對(duì)應(yīng)的表名 。
- type:
type
字段比較重要, 它提供了判斷查詢(xún)是否高效的重要依據(jù)依據(jù). 通過(guò)type
字段, 我們判斷此次查詢(xún)是全表掃描
還是索引掃描
等。如const(主鍵索引或者唯一二級(jí)索引進(jìn)行等值匹配的情況下),ref(普通的?級(jí)索引列與常量進(jìn)?等值匹配),index(掃描全表索引的覆蓋索引) 。
通常來(lái)說(shuō), 不同的 type 類(lèi)型的性能關(guān)系如下:ALL < index < range ~ index_merge < ref < eq_ref < const < system``ALL
類(lèi)型因?yàn)槭侨頀呙? 因此在相同的查詢(xún)條件下, 它是速度最慢的. 而 index
類(lèi)型的查詢(xún)雖然不是全表掃描, 但是它掃描了所有的索引, 因此比 ALL 類(lèi)型的稍快.
- possible_key:查詢(xún)中可能用到的索引*(可以把用不到的刪掉,降低優(yōu)化器的優(yōu)化時(shí)間)* 。
- key:此字段是 MySQL 在當(dāng)前查詢(xún)時(shí)所真正使用到的索引。
- filtered:查詢(xún)器預(yù)測(cè)滿(mǎn)足下一次查詢(xún)條件的百分比 。
- rows 也是一個(gè)重要的字段. MySQL 查詢(xún)優(yōu)化器根據(jù)統(tǒng)計(jì)信息, 估算 SQL 要查找到結(jié)果集需要掃描讀取的數(shù)據(jù)行數(shù). 這個(gè)值非常直觀顯示 SQL 的效率好壞, 原則上 rows 越少越好。
- extra:表示額外信息,如Using where,Start temporary,End temporary,Using temporary等。
-
數(shù)據(jù)結(jié)構(gòu)
+關(guān)注
關(guān)注
3文章
573瀏覽量
40232 -
MySQL
+關(guān)注
關(guān)注
1文章
829瀏覽量
26743 -
索引
+關(guān)注
關(guān)注
0文章
59瀏覽量
10501 -
字段
+關(guān)注
關(guān)注
0文章
13瀏覽量
1660
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論