一. 了解索引的種類和用法(這里只探究BTree索引的用法)
1. 唯一索引
唯一索引不允許兩行具有相同的索引值对途。如果是多列構(gòu)成的唯一索引,則要求多列的組合值不能出現(xiàn)相同
2. 組合索引
組合索引又稱復(fù)合索引溪掀,由多列構(gòu)成。在使用組合索引時啡氢,需要保證復(fù)合索引的第一列在語句中使用了索引菩暗,在合適的場景可以避免回表查詢掰曾,在索引中完成查詢。
二. 建立索引的技巧
1.為主鍵停团,外鍵以及對記錄起明顯標識作用的字段建立索引
這些字段通常會用作條件篩選旷坦,表連接,以及排序分組佑稠,為這些字段加上單個索引可以縮短sql執(zhí)行的時間
2.在業(yè)務(wù)相近的字段上建立組合索引
將一些經(jīng)常出現(xiàn)在一個結(jié)果集中的字段按照順序建立組合索引秒梅,通常把篩選效果明顯的字段放在組合索引的前面。
3.在必須要前導(dǎo)模糊查詢的字段在建立全文索引
前導(dǎo)模糊查詢 '%str','%str%'會導(dǎo)致普通索引失效舌胶,要想使用索引需要建立全文索引(FULLTEXT INDEX)
4.在不合適的字段上不建索引
一些字段不適用用來建立索引捆蜀,非但不會優(yōu)化查詢效率,反而會使查詢效率變得十分低下幔嫂。
如:
篩選效果不明顯的字段: 篩選后的結(jié)果集相對總數(shù)據(jù)量占比很大時漱办,需要重復(fù)的去索引樹中檢索到行數(shù)據(jù)標識ROWID,然后去表中取出數(shù)據(jù)婉烟。這樣的查詢效率甚至會比全表掃描更低。
字段長度非常大的字段: 備注暇屋,大文本等類型的字段在建立索引時似袁,需要消耗很大的空間去存放索引樹
三. 什么情況下會使用索引
COLUMN_INDEX =(>,>=,<,<=) ?
COLUMN_INDEX BETWEEN ? AND ?
COLUMN_INDEX IN (?,?,?)
COLUMN_INDEX LIKE 'str?' (后導(dǎo)模糊查詢)
TABLE1.COLUMN_INDEX = TABLE2.COLUMN_INDEX (表關(guān)聯(lián))
書寫SQL的規(guī)范
1. 會引起索引失效的SQL
使用not,!=昙衅,
使用前導(dǎo)模糊查詢'%str'扬霜,‘%str%’,
對索引字段使用函數(shù) tip: where id + 1 = 123
對索引字段進行類型轉(zhuǎn)換 tip: where type = 2 (type 為varchar 類型而涉,此時type_index索引失效)
使用order by排序時著瓶,tip: 使用普通索引時,如果結(jié)果集為 * 時啼县,不走索引材原;使用復(fù)合索引,如果sql語句使用索引字段的順序和復(fù)合索引字段順序不一致時季眷,不走索引
2. 一些低效的sql
整理好后繼續(xù)發(fā)布