MYSQL索引命中率

2021-09-17 01:15:52 字數 1782 閱讀 2073

一、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.建立索引時避免以下錯誤觀念

mysql索引的命中率

轉於 首先明確 為什麼要用聯合索引?對於查詢語句 select e.from e where e.e1 1 and e.e3 2 涉及到兩列,這個時候我們一般採用乙個聯合索引 e1,e3 而不用兩個單列索引,這是因為一條查詢語句往往應為mysql優化器的關係只用乙個索引,就算你有兩個索引,他也只用乙...

Mysql快取命中率

mysql快取命中率,網上說法不一,下面我說下我的看法,大家輕拍 總的select查詢數等於com select 沒命中 qcache hits 命中 解析錯誤的查詢。再來看看com select變數 sql view plain copy print?mysql show global statu...

mysql計算共享池命中率 計算記憶體命中率

1 lc的命中率 計算公式 library cache hit ratio sum pinhits sum pins selectsum pinhits sum pins fromv librarycache 通常在98 以上,否則,需要要考慮加大共享池,繫結變數,修改cursor sharing等...