mysql簡單索引 mysql簡單索引

2021-10-17 20:46:26 字數 1318 閱讀 1442

mysql的索引是在儲存引擎實現的,而不是在伺服器層,因此不是標準的。

b-tree:

大部分的mysql支援b-tree索引,archive知道mysql5.1才支援,而且僅僅是支援單個auto_increment列;ndb儘管把索引標記我俄哦btree,但內部使用的是t-tree。myisam使用壓縮字首一減小索引,按照行儲存的物理位置引用被索引的行;而innodb不會壓縮,因為他不能把壓縮用與某些優化,也是按照主鍵值引用行。

b-tree通常意味著資料儲存是有序的,並且每個葉子到根的距離是一樣的,每個葉子都有子節點的上限和下限,並且含有被指向資料的指標,而沒有指向其他頁面的指標(有指向下乙個頁面的連線),每個葉子對應乙個key值,這個key值在葉子的上一級頁面裡儲存。根與葉子間可能包含很多層節點頁面,這個深度取決於表的大小。

因為b-tree是按順序儲存的索引,所以對範圍性搜尋很有用,如果索引有多個列,索引儲存的順序=建立表時候的資料。

b-tree索引對於一下型別有用:匹配全名,匹配最左字首(比如僅僅使用索引中第一列),匹配列字首,匹配範圍值,精確匹配一部分並且匹配某個範圍中的另一部分(如,同時使用索引中的多個列)。

b-tree的侷限性:如果查詢沒有從索引列的最左側開始他就沒什麼用處,不能跳過索引中的列,不能優化訪問任何乙個第乙個範圍條件在右邊的列。

現在意識到了列順序的重要性了吧,對於高效能的應用程式,也許要針對相同列一不同順序建立多個索引,一滿足要求。

雜湊索引:

雜湊索引建立在哈西表的基礎上,對於沒一行,儲存引擎計算出了被索引列的雜湊碼,把資料行的哈西碼儲存在索引裡,並且儲存了乙個指向資料行的指標,只有memory(支援b-tree)引擎支援顯示的不唯一的雜湊索引(ndb支援唯一的雜湊索引),如果有多個相同的雜湊碼,索引就會把行以鍊錶的形式儲存在哈西表的同一條記錄中。雜湊值的長度不依賴於索引列的值,索引非常緊湊的儲存簡短的哈西值。

雜湊索引的侷限性,mysql不能使用索引中的值來避免讀取行,不過訪問記憶體很快,通常不會影響效能;不能使用哈西索引排序;不支援分鍵匹配;只支援使用了= in(),和《=》的想等比較,不使用範圍查詢;訪問哈西表的資料很快,除非碰撞率很高(相同的雜湊碼),發生碰撞的時候,讀取每個指標,逐個比較,以確定正確值;如果有很多碰撞有些維護會很慢。這些限制使哈西索引在某些情況下使用,然而當符合要求的時候,就能極大的改善效能(如資料倉儲)

innodb有個特別的功能:自適應雜湊索引(adaptive hash index),當某些索引被很頻繁的訪問後,就會在b-tree頂端建立指向記憶體的索引,使得b-tree有了一些雜湊索引的特性,但過程是全自動的,不能控制。

全文索引:

fulltext是myisam表的一種特殊索引,它從文字中找到關鍵字,而不是直接和索引中的值進行比較

mysql 索引 簡書 MySQL 索引

簡介 索引用於快速找出在某個列中有一特定值的行,不使用索引,mysql必須從第一條記錄開始讀完整個表,直到找出相關的行,表越大,查詢資料所花費的時間就越多。如果表中查詢的列有乙個索引,mysql能夠快速到達乙個位置去搜尋資料檔案,而不必檢視所有資料,那麼將會節省很大一部分時間。使用原則 索引底層使用...

mysql索引簡談

mysql索引簡談 一 什麼是索引 就好比我們在看一本書的時候,有目錄的話,我們可以快速定位到想看的地方,而沒有目錄的話,我們只能一頁一頁地翻。索引就像目錄,有了索引,資料庫可以快速查詢到目標內容,而不必查詢整個資料庫表,但是如果沒有的話,資料庫只能一行一行地遍歷資料。create table t ...

mysql欄位簡索引 MySQL中索引使用簡例

一張表最多不超過4個索引 某個欄位的值離散度越高,該字段越適合做索引的關鍵字。占用儲存空間少的字段更適合選做索引的關鍵字。較頻繁的作為where查詢條件的字段應該建立索引,分組字段或者排序字段應該建立索引,兩個表的連線字段應該建立索引。更新頻繁的字段不適合做索引,不會出現在where中的字段不應該建...