索引種類
-
普通索引:僅加速查詢
-
唯一索引:加速查詢 + 列值唯一(可以有null)。他和普通索引都是用btree實現的,後者只多了一個查重複。
-
主鍵索引:加速查詢 + 列值唯一(不可以有null)+ 表中只有一個
-
組合索引:多列值組成一個索引,專門用於組合搜索,其效率大於索引合併
-
全文索引:對文本的內容進行分詞,進行搜索
在哪些column上使用索引?
3.1較頻繁的作爲查詢條件字段應該創建索引
3.2唯一性太差的字段不適合創建索引,儘管頻繁作爲查詢條件,例如gender性別字段
3.3更新非常頻繁的字段
不適合作爲索引
3.4不會出現在where子句中
的字段不該創建索引
btree的查詢次數
如圖所示,如果要查找數據項29,那麼首先會把磁盤塊1由磁盤加載到內存,此時發生一次IO,在內存中用二分查找確定29在17和35之間,鎖定磁盤塊1的P2指針,內存時間因爲非常短(相比磁盤的IO)可以忽略不計,通過磁盤塊1的P2指針的磁盤地址把磁盤塊3由磁盤加載到內存,發生第二次IO,29在26和30之間,鎖定磁盤塊3的P2指針,通過指針加載磁盤塊8到內存,發生第三次IO,同時內存中做二分查找找到29,結束查詢,總計三次IO。真實的情況是,3層的b+樹可以表示上百萬的數據,如果上百萬的數據查找只需要三次IO,性能提高將是巨大的,如果沒有索引,每個數據項都要發生一次IO,那麼總共需要百萬次的IO,顯然成本非常非常高。