mysql索引實戰 MySQL索引實戰經驗總結

2021-10-18 06:08:36 字數 1413 閱讀 3312

mysql索引對資料檢索的效能至關重要,盲目的增加索引不僅不能帶來效能的提公升,反而會消耗更多的額外資源,本篇總結了一些mysql索引實戰經驗。

索引是用於快速查詢記錄的一種資料結構。索引就像是資料庫中資料的目錄,資料庫在查詢時,首先在索引中找到匹配的值,然後根據這個匹配值找到對應的資料行。

概念解釋

聚簇索引

聚簇索引的順序就是資料的物理儲存順序,索引中資料域儲存的就是實際的資料,乙個表最多只能有乙個聚簇索引,適用於查詢多行資料,不適用於頻繁修改的列,一般在主鍵上建立。

非聚簇索引

索引順序與資料物理排列順序無關,索引中儲存的內容為實際資料的位址,適應於查詢單行資料。

普通索引

即平時建立的普通索引。

唯一索引

索引所在的列或列組合的值是全表唯一的。

全文索引

單列索引

在單列上建立的索引。

組合索引

在多個列上建立的索引。

最左字首查詢

where子句中有a、b、c三個查詢條件,建立乙個組合索引abc(a,b,c),最左字首的概念是說以組合索引最左邊的列a組合成的查詢條件,如(a,b,c)、(a,b)、(a,c),這三種情況的查詢條件都會使用abc索引,和where子句中a、b、c出現的順序沒關係,可以是where c=? and b=? and a=?,但(b,c)組合不會使用索引,即where c=? and b=?。

哪些列適合建立索引

經常作為查詢條件的列;

經常作為排序條件的列;

經常作為join條件的列;

經常被查詢的列;

哪些列不適合建立索引

資料頻繁被修改的列,資料被修改,索引需要做相應的修改,消耗資源;

區分度不是很高的列,如性別,列值重複性太大,索引效果不是很明顯;

不是經常被作為查詢條件、排序條件、連線條件的列。

經驗總結

列上進行函式計算將不會使用索引;

對於建立索引的列,避免儲存null,null會使索引更加複雜、效率變低,可以使用not null進行約束;

對於模糊查詢like '%abc%',將不會使用索引,而like 'abc%'將會使用索引;

對於not in、not exists、!=等負向查詢將不會使用索引;

每次查詢只使用乙個索引,如果where條件使用了索引,order by將不再使用索引;

對於where子句中有多個查詢條件的,單列索引的效率不如復合索引,因為查詢每次只能使用乙個索引;

mysql只對以下操作符才使用索引:、>=、between、in,但是需要注意in的範圍值不要太多;

union all可以使用索引,但本身效率不是很高,不建議使用;

列上進行型別轉換的將不會使用索引;

老版本mysql對or條件不使用索引,新版本才支援,不建議使用or。

關於索引的實戰經驗總結後續還會不斷更新。

mysql 雜湊索引 MySQL索引之雜湊索引

雜湊索引 hash index 建立在雜湊表的基礎上,它只對使用了索引中的每一列的精確查詢有用。對於每一行,儲存引擎計算出了被索引的雜湊碼 hash code 它是乙個較小的值,並且有可能和其他行的雜湊碼不同。它把雜湊碼儲存在索引中,並且儲存了乙個指向雜湊表中的每一行的指標。在mysql中,只有me...

mysql主鍵索引 MySQL索引之主鍵索引

在mysql裡,主鍵索引和輔助索引分別是什麼意思,有什麼區別?上次的分享我們介紹了聚集索引和非聚集索引的區別,本次我們繼續介紹主鍵索引和輔助索引的區別。1 主鍵索引 主鍵索引,簡稱主鍵,原文是primary key,由乙個或多個列組成,用於唯一性標識資料表中的某一條記錄。乙個表可以沒有主鍵,但最多只...

mysql聚集索引 MySQL索引之聚集索引介紹

在mysql裡,聚集索引和非聚集索引分別是什麼意思,有什麼區別?在mysql中,innodb引擎表是 聚集 索引組織表 clustered index organize table 而myisam引擎表則是堆組織表 heap organize table 也有人把聚集索引稱為聚簇索引。當然了,聚集索...