MYSQL索引命中率

一、MySQL 索引類型

   1、從物理存儲角度上,索引可以分爲聚集索引和非聚集索引。

①. 聚集索引(Clustered Index)

聚集索引決定數據在磁盤上的物理排序,一個表只能有一個聚集索引。

②. 非聚集索引(Non-clustered Index)

非聚集索引並不決定數據在磁盤上的物理排序,索引上只包含被建立索引的數據,以及一個行定位符 row-locator,這個行定位符,可以理解爲一個聚集索引物理排序的指針,通過這個指針,可以找到行數據

2、邏輯角度,索引可以分爲以下幾種。

①普通索引:最基本的索引,它沒有任何限制。

②唯一索引:與普通索引類似,不同的就是索引列的值必須唯一,但允許有空值。如果是組合索引,則列值的組合必須唯一。

③主鍵索引:它是一種特殊的唯一索引,用於唯一標識數據表中的某一條記錄,不允許有空值,一般用     primary key 來約束。主鍵和聚集索引的關係詳見“問題詳解”中的第4題。

④聯合索引(又叫複合索引):多個字段上建立的索引,能夠加速複合查詢條件的檢索。

⑤全文索引:老版本     MySQL 自帶的全文索引只能用於數據庫引擎爲 MyISAM 的數據表,新版本 MySQL 5.6 的 InnoDB 支持全文索引。默認 MySQL 不支持中文全文檢索,可以通過擴展 MySQL,添加中文全文檢索或爲中文內容表提供一個對應的英文索引表的方式來支持中文。

二、索引優化規則

1.前導模糊查詢不能使用索引。

2.union、in、or 都能夠命中索引,建議使用 in。

3.負向條件查詢不能使用索引,可以優化爲 in 查詢。

4.聯合索引最左前綴原則(又叫最左側查詢)

5.範圍列可以用到索引(聯合索引必須是最左前綴)。

6.把計算放到業務層而不是數據庫層。

7.強制類型轉換會全表掃描

8.更新十分頻繁、數據區分度不高的字段上不宜建立索引。

9.利用覆蓋索引來進行查詢操作,避免回表。

10.如果有 order by、group by 的場景,請注意利用索引的有序性。

11.使用短索引(又叫前綴索引)來優化索引。

12.建立索引的列,不允許爲 null。

13.利用延遲關聯或者子查詢優化超多分頁場景。

14.業務上具有唯一特性的字段,即使是多個字段的組合,也必須建成唯一索引。

15.超過三個表最好不要 join。

16.如果明確知道只有一條結果返回,limit 1 能夠提高效率。

17.SQL 性能優化 explain 中的 type:至少要達到 range 級別,要求是 ref 級別,如果可以是 consts 最好。

18.單表索引建議控制在5個以內。

19.單索引字段數不允許超過5個。

 

20.創建索引時避免以下錯誤觀念

  • 索引越多越好,認爲一個查詢就需要建一個索引。

  • 寧缺勿濫,認爲索引會消耗空間、嚴重拖慢更新和新增速度。

  • 抵制惟一索引,認爲業務的惟一性一律需要在應用層通過“先查後插”方式解決。

  • 過早優化,在不瞭解系統的情況下就開始優化。

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