MySQL 索引創建的原則

前言

MySQL 索引的使用一直是工作中的重點,一個線上項目如果不能合理使用索引,那帶來的危害可能是毀滅性的(數據庫鎖死、當機等)。

所以這一塊也是面試中的重點,那麼,MySQL 創建索引的原則有哪些呢?

一般來說,在 MySQL 中使用索引的原則有以下幾點:

1、 對於查詢頻率高的字段創建索引

索引的目的就是提升查詢速度,這一點毋庸置疑。所以對於查詢頻率高的字段要創建索引,如:用戶表的手機號。

2、 對排序、分組、聯合查詢頻率高的字段創建索引

3、 索引的數目不宜太多

  • 每創建一個索引都會佔用相應的物理控件

  • 過多的索引會導致insert、update、delete語句的執行效率降低

4、若在實際中,需要將多個列設置索引時,可以採用多列索引

如:某個表(假設表名爲Student),存在多個字段(StudentNo, StudentName, Sex, Address, Phone, BirthDate),其中需要對StudentNo,StudentName字段進行查詢,對Sex字段進行分組,對BirthDate字段進行排序,此時可以創建多列索引

index index_name (StudentNo, StudentName, Sex, BirthDate);      #index_name爲索引名

在上面的語句中只創建了一個索引,但是對4個字段都賦予了索引的功能。

創建多列索引,需要遵循BTree類型,即第一列使用時,才啓用索引。

在上面的創建語句中,只有mysql語句在使用到StudentNo字段時,索引纔會被啓用,如:

select * from Student where StudentNo = 1000;      #使用到了StudentNo字段,索引被啓用。

可以使用explain檢測索引是否被啓用,如:

explain select * from Student where StudentNo = 1000;

在這裏插入圖片描述
附:EXPLAIN列的解釋

  • table:顯示這一行的數據是關於哪張表的
  • type:這是重要的列,顯示連接使用了何種類型。從最好到最差的連接類型爲const、eq_reg、ref、range、index和ALL
  • type顯示的是訪問類型,是較爲重要的一個指標,結果值從好到壞依次是:system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL
    一般來說,得保證查詢至少達到range級別,最好能達到ref。
  • possible_keys:顯示可能應用在這張表中的索引。如果爲空,沒有可能的索引。可以爲相關的域從WHERE語句中選擇一個合適的語句
  • key: 實際使用的索引。如果爲NULL,則沒有使用索引。很少的情況下,MYSQL會選擇優化不足的索引。這種情況下,可以在SELECT語句中使用USE INDEX(indexname)來強制使用一個索引或者用IGNORE INDEX(indexname)來強制MYSQL忽略索引
  • key_len:使用的索引的長度。在不損失精確性的情況下,長度越短越好
  • ref:顯示索引的哪一列被使用了,如果可能的話,是一個常數
  • rows:MYSQL認爲必須檢查的用來返回請求數據的行數
  • Extra:關於MYSQL如何解析查詢的額外信息。將在表4.3中討論,但這裏可以看到的壞的例子是Using temporary和Using filesort,意思MYSQL根本不能使用索引,結果是檢索會很慢

5、選擇唯一性索引

唯一性索引的值是唯一的,可以更快速的通過該索引來確定某條記錄。例如,學生表中學號是具有唯一性的字段。爲該字段建立唯一性索引可以很快的確定某個學生的信息。如果使用姓名的話,可能存在同名現象,從而降低查詢速度。

6、儘量使用數據量少的索引

如果索引的值很長,那麼查詢的速度會受到影響。例如,對一個CHAR(100)類型的字段進行全文檢索需要的時間肯定要比對CHAR(10)類型的字段需要的時間要多。

7、儘量使用前綴來索引

如果索引字段的值很長,最好使用值的前綴來索引。例如,TEXT和BLOG類型的字段,進行全文檢索會很浪費時間。如果只檢索字段的前面的若干個字符,這樣可以提高檢索速度。

8、刪除不再使用或者很少使用的索引

表中的數據被大量更新,或者數據的使用方式被改變後,原有的一些索引可能不再需要。數據庫管理員應當定期找出這些索引,將它們刪除,從而減少索引對更新操作的影響。

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