MYSQL學習筆記之索引

2021-08-20 13:55:02 字數 1432 閱讀 9488

首先先看一下索引這個詞在詞典中的定義:指將文獻中具有

檢索意義

的事項(可以是人名、地名、詞語、概念、或其他事項)按照一定方式

有序編排起來,以供

檢索的工具書。

從上面的標紅的關鍵字來看索引有兩個特點:

1、索引是供使用者搜尋時所用的工具。

2、索引是有序的

在mysql中索引是儲存引擎快速找到記錄的一種資料結構。

一、b-tree索引:

首先假設有乙個索引為(name,age,birthday)

適用於全鍵值、鍵值範圍、鍵字首查詢。

下面的為b-tree索引的有效範圍:

1、全值匹配

是指對索引中的所有列進行匹配。如查詢姓名為張三,年齡為20,出生日期為1990-02-11的人。

2、匹配最左前列:

即只使用索引的第一列。例如查詢名為張三的人。

3、匹配列字首

只匹配某一列的開頭部分。可以查詢所有姓張的人。這裡也只用了索引的第一列。

4、匹配範圍值

索引可以用於查詢姓名在李四與張三之間的人(注意這裡只是類別,實際中只對英文範圍查詢)。這裡也只用了索引的第一列。

5、精確匹配某一列並範圍匹配另一列

姓名為張三,年齡在10-20歲之間的人。

6、只訪問索引的查詢

查詢的列只有name,age,birthday。這就是我們常說的索引覆蓋。

b-tree索引的限制:

1、如果不是按照索引的最左列查詢,則無法使用索引。如無法查詢年齡為20歲,生日為1990-02-11。

2、不能跳過索引中的列。如查詢姓名為張三,出生日期為1990-02-11的人。

3、如果查詢中有某個列的範圍查詢,則右邊所有的列都無法使用索引優化查詢。

b-tree索引是有序的,所以除了查詢值外,索引還可以用於查詢中的 order by 操作。

雜湊索引:

雜湊索引是基於雜湊表實現的,儲存引擎會對所有的索引列計算乙個雜湊碼,不同的鍵值行計算出的雜湊碼也不一樣,雜湊索引將所有的雜湊碼儲存在索引中,在mysql中只有memory引擎顯示的支援雜湊索引。

如果多個列的雜湊值相同,索引會以鍊錶的方式存放多個記錄的指標到同一雜湊條目中。當查詢語句計算出的雜湊值相同時(雜湊衝突),會遍歷所有鍊錶對比where語句中的值,如果相同則取出。(select name,age from user where name="張三")

雜湊索引的限制:

雜湊索引只包含雜湊值和行指標,而不儲存字段值,所以不存在索引覆蓋來避免讀取行。

雜湊索引資料並不是按照索引值順序儲存的,所以無法用於排序。

雜湊索引也不支援部分索引列進行查詢,因為雜湊索引的雜湊值是將索引列一起起算得出的,例如(name,age)不能單獨使用name 或者age查詢。

雜湊索引只支援等值查詢。

發生雜湊衝突很多的話,一些索引維護代價也會很高。

MYSQL學習筆記之選錯索引

優化器的目的是選擇索引。他會根據自己內部的判斷,從而選擇乙個最優的執行方案。而判斷是乙個因素就是掃瞄行數,越少的掃瞄行數,就說明訪問磁碟的資料次數越少,消耗的cpu資源也就越少。1.掃瞄行數如何判斷 mysql開始執行之前,並不能知道,滿足這個條件的記錄有多少,而只能採用統計的方法,進行預估。這個統...

Mysql學習筆記整理之索引

索引是乙個分散儲存的資料結構 檢索 對資料庫表中一列或多列的值進行排序 索引能極大的減少儲存引擎需要掃瞄的資料量 索引可以把隨機io變成順序io 索引可以幫助我們進行分組,排序操作時,避免使用臨時表 資料庫錶行中資料的物理順序與鍵值的邏輯 索引 順序相同 輔助索引末尾指向主鍵索引,然後通過主鍵索引找...

學習筆記 mysql索引原理之InnoDB

innodb是事務安全的mysql儲存引擎,在oltp的應用中,innodb應該作為核心應用表的首選儲存引擎。1 執行緒 後台的執行緒主要負責 重新整理記憶體池中的資料,保證緩衝池中的記憶體快取的是最近的資料 將已修改的資料檔案重新整理到磁碟檔案 保證在資料庫發生異常情況下innodb能恢復到正常狀...