mysql索引種類

索引種類 

  • 普通索引:僅加速查詢

  • 唯一索引:加速查詢 + 列值唯一(可以有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,顯然成本非常非常高。

 

更多,轉自:https://www.cnblogs.com/lwcode6/p/11320795.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章