1. 程式人生 > >筆記:MySQL的索引型別

筆記:MySQL的索引型別

索引(在mysql中也叫做“鍵(key)”)是儲存引擎用於快速找到記錄的一種資料結構。

  • 索引的型別
    索引有很多種型別,可以為不同的場景提供更好的效能。在MySQL中,索引是在儲存引擎層而不是伺服器層實現的。所有,並沒有統一的索引標準:不同儲存引擎的索引的工作方式並不一樣,也不是所有的儲存引擎都支援所有型別的索引。即使多個儲存引擎支援同一種類型的索引,其底層的實現也可能不同。
  1. B-Tree索引
    當人們談論索引的時候,如果沒有特別指明型別,那多半說的是B-Tree索引,
它使用B-Tree資料結構來儲存資料。大多數MySQL引擎都支援這種索引。Archive
引擎是一個例外:5.1之前Archive不支援任何索引,知道5.1才開始支援單個自增列
(AUTO_INCREMENT)的索引。	
    B-Tree通常意味著所有的值都是按順序儲存的,並且每一個葉子頁到根的距離相同。
    B-Tree索引能夠加快訪問資料的速度,因為儲存引擎不再需要進行全表掃描來獲取
需要的資料,取而代之的是從索引的根節點開始進行搜尋。根節點的槽中存放了指向
子節點的指標,儲存引擎根據這些指標向下層查詢。通過比較節點頁的值和要查詢的值
可以找到合適的指標進入下層子節點,這些指標實際上定義了子節點頁中值的上限和
下限。最終儲存引擎要麼是找到對應的值,要麼該記錄不存在。
    B-Tree對索引列是順序組織儲存的,所以很適合查詢範圍資料。
  1. 雜湊索引
   雜湊索引(hash index)基於雜湊表實現,只有精確匹配索引所有列的查詢才有效。
對於每一行資料,儲存引擎都會對所有的索引列計算一個雜湊碼(hash code),雜湊碼是
一個較小的值,並且不同鍵值的行計算出來的雜湊碼也不一樣。雜湊索引將所有的雜湊碼
儲存在索引中,同時在雜湊表中儲存指向每個資料行的指標。
   在MySQL中,只有Memory引擎顯式支援雜湊索引。這也是Memory引擎表的預設索引型別,
Memory引擎同時也支援B-Tree索引。
  1. 空間資料索引(R-Tree)
   MyISAM表支援空間索引,可以用作地理資料儲存。和B-Tree索引不同,這類索引
無須字首查詢。空間索引會從所有維度來索引資料。
  1. 全文索引
   全文索引是一種特殊型別的索引,它查詢的是文字中的關鍵詞,而不是直接比較索引中的
值。全文搜尋和其他幾類索引的匹配方式完全不一樣。它有許多需要注意的細節,如停用詞、
詞幹和複數、布林搜尋等。全文索引更類似於搜尋引擎做的事情,而不是簡單的WHERE條件
匹配。
  1. 其他索引類別
   還有很多第三方的儲存引擎使用不同型別的資料結構來儲存索引。例如:TokuDB使用
分形樹索引(fractal tree index),這是一類教新開發的資料結構,既有B-Tree的
很多優點,也避免了B-Tree的一些缺點。