索引覆蓋的理解:
????索引覆蓋蒙保,是指非聚簇索引下,select查詢的列數(shù)據(jù)時奴曙,通過索引樹直接找到指定的列數(shù)據(jù)别凹,而不通過回行進入磁盤,則稱之為索引覆蓋洽糟。
根據(jù)之前的文章《mysql的聚簇索引與非聚簇索引的簡短總結》介紹過炉菲,myisam引擎的數(shù)據(jù)表的構成分為三個部分:table.frm堕战、table.myd、table.myi拍霜,其中table.myi是存儲索引樹的文件嘱丢。執(zhí)行索引過程中,先從索引樹文件中找到數(shù)據(jù)的具體在磁盤所在的位置祠饺,再回行到磁盤中進行查找越驻。而如果要查詢的數(shù)據(jù)列直接能在索引樹中查找到,就不用再回行到磁盤中查找道偷,省略了這一步驟缀旁,則稱之為索引覆蓋。
示例:
創(chuàng)建myisam引擎的數(shù)據(jù)表student
CREATE TABLE `student` (
?`id` int(11) NOT NULL AUTO_INCREMENT,
?`name` char(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
?PRIMARY KEY (`id`)
) ENGINE=MyISAM?DEFAULT CHARSET=utf8 COLLATE=utf8_bin
補充10條數(shù)據(jù)后:
mysql> select * from student;
+----+---------------+
| id | name?????|
+----+---------------+
|?1 | xiaoming???|
|?2 | lily?????|
|?3 | Xiaoming???|
|?4 | Lebron James?|
|?5 | Kobe?????|
|?9 | LeBron james?|
| 10 | Stephen curry |
|?8 | david lee??|
|?6 | james hadden?|
|?7 | chris paul??|
+----+---------------+
然后解釋對比兩個sql查詢的區(qū)別
通過觀察對比發(fā)現(xiàn)勺鸦,只查詢自增索引id列時并巍,再extra的選項中增加了using index選項。證明查找數(shù)據(jù)時沒走進入table.myd中進行查找换途,通過索引樹文件table.myi即查到了所有數(shù)據(jù)懊渡,即覆蓋索引。