mysql索引知識 mysql索引必會知識點

2021-10-19 19:46:02 字數 1310 閱讀 5753

聚簇索引和非聚簇索引

主要區別在於組織索引的結構是否和資料儲存的結構一樣。一般再innodb中主鍵索引就是聚簇索引,沒有主鍵會預設生成隱藏主鍵字段。理論上也可以指定其他欄位為聚簇索引,聚簇索引也不必唯一。

主鍵索引和普通索引

我們都知道,innodb引擎下的儲存結構為b+樹,也就是說首先根據key值一層一層的組織整個儲存結構,然後在最後一層葉子節點存放真正的value值。那麼我們用什麼作為這個key值呢?主鍵索引就是將主鍵作為這個key值,非主鍵索引就是在建立索引時將其他值作為key。然後將主鍵作為value儲存。非主鍵索引也被稱為二級索引,而主鍵索引也被稱為聚簇索引。

那麼使用主鍵索引有什麼好處呢?最大的好處就是只需要一次就能定位到真實的資料值,而普通索引都需要進行回表查詢。也就是先查詢主鍵id。然後通過主鍵id查詢真實的value值。

最左字首匹配原則

mysql建立索引的時候都是按照定義字段從左到右排序的。也就是說,如果存在索引(name,age)。最後建立的b+樹的葉子節點肯定是從左到右先按照name屬性分成n組。然後每組中再按照age屬性排列的。所以當我們查詢where name = ***時,mysql就會使用上面的索引結構進行查詢。而不是走全表掃瞄。但是如果是 where age = *** 則不滿足全域性掃面。只能走全表掃瞄。

索引下推

索引下推是mysql 5.6之後引入的。假如說我們存在索引(name,age)然後查詢 where name like *** and age = *** and *** = *** 在以前的話是先進行name索引查詢,然後回表查詢出name like ***的結果。然後再篩選出age = *** and *** = ***的結果。也就是說符合name = ***有多少條資料。我們就需要回表查詢多少次。如果是5.6之後的版本。會將age = ***這個條件在第一次匹配name like *** 的時候就進行一次過濾。

聯合索引、索引覆蓋

上面我們就說過普通索引存在回表查詢的操作,這裡會大大影響效率。那麼怎麼避免這種情況呢。 我們可以在建立索引的時候就將要查詢的資料列建立成索引,這樣在查詢的時候因為普通索引直接包含了所以要查詢的資料,也就不需要回表查詢了。也就是我們要查詢的資料是索引key的子集。而這個索引key就是聯合索引。也就是多個列共同建立的索引。

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 也有人把聚集索引稱為聚簇索引。當然了,聚集索...