MySQL索引的分類、數據結構及其使用建議

索引的分類

建議 一張表最多建索引不要超過5個。

分組之前必排序

單值索引

一個索引只包含單個列,一個表可以有多個單列索引。

建議 一張表最多建索引不要超過5個

排序儘量遵守所建索引的順序和個數。

group by 儘量遵守所建索引的順序和個數。

唯一索引

索引列的值必須唯一,但允許有空值。

複合索引

即一個索引包含多個列。

索引的基本語法

創建索引
create [unique] index idnexName on tableName(columnname(length));
alter table tableName add [unique] index [indexName] on (columnname(length));
刪除索引
drop index [indexName] on tableName;
alter table tableName drop index indexName; 
查看索引
show index from tableName;

例子:
在這裏插入圖片描述

mysql索引結構

  • BTree索引

在這裏插入圖片描述

查找過程

如果要查找數據項29,那麼首先會把磁盤塊1由磁盤加載到內存,此時發生一次IO,29在17-35之間,鎖定磁盤塊1的p2指針,內存時間(相比磁盤的IO)忽略不計,通過指針p2找到磁盤塊3,發生第二次IO,29在23-34之間,鎖定磁盤塊3的p2指針,通過指針加載磁盤塊8,通過對比發現磁盤塊8的數據項29即爲查找項,結束查詢,共計三次IO。

  • Hash索引

  • Full-text全文索引

  • R-Tree索引

需要創建索引的情況

  • 主鍵自動建立唯一索引
  • 頻繁作爲查詢條件的字段應該創建索引
  • 頻繁更新的字段不適合創建索引
  • where條件裏用不到的字段不創建索引
  • 在高併發場景下傾向創建複合索引
  • 查詢中排序的字段,排序字段若通過索引去訪問將大大提高怕羞的速度
  • 查詢中統計或者分組字段

不需要創建索引的情況

  • 表記錄太少

    因爲索引也是以文件的方式在磁盤存放

  • 經常增刪改的表

    可能會經常出現索引失效的情景

  • 數據重複且分佈平均的字段

    即列的離散性越大越適合創建索引,count(distinct column) / count(*) 該值越大說明該列重複數據越少,越適合創建索引

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