定義:幫助MySQL高效獲取數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)。簡單理解為排好序的快速查找數(shù)據(jù)(BTree)結(jié)構(gòu)。以索引文件的形式存儲在磁盤上。
平常所說的索引默認(rèn)為BTree結(jié)構(gòu)組織的索引,其中聚集索引、次要索引、復(fù)合索引、前綴索引、唯一索引默認(rèn)都是使用B+樹索引,除此外還有哈希索引等。
- 優(yōu)勢:提高檢索效率,降低數(shù)據(jù)庫IO成本;索引列對數(shù)據(jù)排序,降低數(shù)據(jù)排序成本,降低CPU消耗。
- 劣勢:實際上索引也是一張表,該表保存主鍵與索引字段,并指向?qū)嶓w表的記錄,所以索引列也要占空間;雖然索引提高查詢速度,同時會降低表更新速度,因為mysql不僅要保存數(shù)據(jù),還要保存索引文件每次更新添加索引列的字段。
分類:單值索引、唯一索引、復(fù)合索引
- 需要創(chuàng)建索引情況:1、逐漸自動建立唯一索引;2、頻繁作為查詢條件的字段;3、外鍵關(guān)系建立索引;4、排序字段作索引提升排序速度;5、統(tǒng)計或分組字段作索引。
- 不需要建索引情況:表記錄少(<300W);頻繁更新字段;where條件里用不到的字段;索引列中重復(fù)數(shù)據(jù)多。
索引優(yōu)化
- left join:根據(jù)左連接特性,leftjoin用于確定如何從右表搜索行,左邊一定有,故而右邊是關(guān)鍵點,要建索引。
- 同理right join左邊表建索引。
- 防止索引失效的十條
(1)全值匹配我最愛
(2)最佳左前綴法則 —— 組合索引中要遵循最左前綴法則,指的是查詢從索引的最左前列開始并且不跳過索引中的列。
(3)不在索引列上做任何操作,包括計算、函數(shù)、自動或手動類型轉(zhuǎn)換,會導(dǎo)致索引失效而全表掃描。
(4)索引中范圍條件右邊的列都失效
(5)盡量使用覆蓋索引,減少select *
(6)在使用!= <>的時候無法使用索引
(7)is null,is not null無法使用索引
(8)like以通配符開頭,如'%abc...'無法使用索引,'abc...%'這樣的可以。
若非要使用'%abc%',那么select的字段不能超過索引列。
(9)字符串不加單引號索引失效
(10)少使用or,做連接時索引失效