定義:幫助MySQL高效獲取數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)绎橘。簡單理解為排好序的快速查找數(shù)據(jù)(BTree)結(jié)構(gòu)泞辐。以索引文件的形式存儲在磁盤上秒旋。
平常所說的索引默認為BTree結(jié)構(gòu)組織的索引,其中聚集索引裳涛、次要索引木张、復合索引、前綴索引端三、唯一索引默認都是使用B+樹索引舷礼,除此外還有哈希索引等。
- 優(yōu)勢:提高檢索效率郊闯,降低數(shù)據(jù)庫IO成本妻献;索引列對數(shù)據(jù)排序,降低數(shù)據(jù)排序成本团赁,降低CPU消耗育拨。
- 劣勢:實際上索引也是一張表,該表保存主鍵與索引字段欢摄,并指向?qū)嶓w表的記錄熬丧,所以索引列也要占空間;雖然索引提高查詢速度怀挠,同時會降低表更新速度析蝴,因為mysql不僅要保存數(shù)據(jù)害捕,還要保存索引文件每次更新添加索引列的字段。
分類:單值索引闷畸、唯一索引尝盼、復合索引
- 需要創(chuàng)建索引情況:1、逐漸自動建立唯一索引佑菩;2盾沫、頻繁作為查詢條件的字段;3殿漠、外鍵關(guān)系建立索引;4疮跑、排序字段作索引提升排序速度;5凸舵、統(tǒng)計或分組字段作索引。
- 不需要建索引情況:表記錄少(<300W);頻繁更新字段;where條件里用不到的字段失尖;索引列中重復數(shù)據(jù)多啊奄。
索引優(yōu)化
- left join:根據(jù)左連接特性,leftjoin用于確定如何從右表搜索行掀潮,左邊一定有菇夸,故而右邊是關(guān)鍵點,要建索引仪吧。
- 同理right join左邊表建索引庄新。
- 防止索引失效的十條
(1)全值匹配我最愛
(2)最佳左前綴法則 —— 組合索引中要遵循最左前綴法則,指的是查詢從索引的最左前列開始并且不跳過索引中的列薯鼠。
(3)不在索引列上做任何操作择诈,包括計算、函數(shù)出皇、自動或手動類型轉(zhuǎn)換羞芍,會導致索引失效而全表掃描。
(4)索引中范圍條件右邊的列都失效
(5)盡量使用覆蓋索引郊艘,減少select *
(6)在使用!= <>的時候無法使用索引
(7)is null,is not null無法使用索引
(8)like以通配符開頭荷科,如'%abc...'無法使用索引,'abc...%'這樣的可以纱注。
若非要使用'%abc%',那么select的字段不能超過索引列畏浆。
(9)字符串不加單引號索引失效
(10)少使用or,做連接時索引失效