mysql 儲存引擎對索引的支援

2021-09-09 04:34:12 字數 1865 閱讀 5193

一、首先給出mysql官方文件給出的不同儲存引擎對索引的支援

從上面的圖中可以得知,mysql 是支援hash索引的,但支援和不支援又和具體的儲存引擎有關係。從圖中看到innodb是支援btree索引,這是我們眾所周知的。但是不支援hash索引。

但是innodb儲存引擎支援hash索引是自適應的,innodb儲存引擎會根據表的使用情況自動為表生成hash索引,不能人為干預是否在一張表中生成hash索引。

二、自適應索引的原理

自適應hash索引原理

1、原理過程

innodb儲存引擎會監控對錶上二級索引的查詢,如果發現某二級索引被頻繁訪問,二級索引成為熱資料,建立雜湊索引可以帶來速度的提公升,則:

1、自適應hash索引功能被開啟

mysql> show variables like '%ap%hash_index';

+----------------------------+-------+

| variable_name | value |

+----------------------------+-------+

| innodb_adaptive_hash_index | on |

+----------------------------+-------+

1 row in set (0.01 sec)

2、經常訪問的二級索引資料會自動被生成到hash索引裡面去(最近連續被訪問三次的資料),自適應雜湊索引通過緩衝池的b+樹構造而來,因此建立的速度很快。

2、特點

1、無序,沒有樹高

2、降低對二級索引樹的頻繁訪問資源

索引樹高<=4,訪問索引:訪問樹、根節點、葉子節點

3、自適應

3、缺陷

1、hash自適應索引會占用innodb buffer pool;

2、自適應hash索引只適合搜尋等值的查詢,如select * from table where index_col='***',而對於其他查詢型別,如範圍查詢,是不能使用的;

3、極端情況下,自適應hash索引才有比較大的意義,可以降低邏輯讀。

三、監控與關閉

1、狀態監控

mysql> show engine innodb status\g

……hash table size 34673, node heap has 0 buffer(s)

0.00 hash searches/s, 0.00 non-hash searches/s

1、34673:位元組為單位,占用記憶體空間總量

2、通過hash searches、non-hash searches計算自適應hash索引帶來的收益以及付出,確定是否開啟自適應hash索引

2、限制

1、只能用於等值比較,例如=, <=>,in

2、無法用於排序

3、有衝突可能

4、mysql自動管理,人為無法干預。

3、自適應雜湊索引的控制

由於innodb不支援hash索引,但是在某些情況下hash索引的效率很高,於是出現了adaptive hash index功能,但是通過上面的狀態監控,可以計算其收益以及付出,控制該功能開啟與否。

預設開啟,建議關掉,意義不大。可以通過 set global innodb_adaptive_hash_index=off/on 關閉和開啟該功能。

MySQL的儲存引擎對索引的實現

mysql中,常用的兩種儲存引擎是myisam和innodb mysql中,將表結構 表資料 表索引統一存放在了磁碟中的同一目錄下,mysql安裝目錄下的data資料夾下,以庫進行資料夾劃分 儲存引擎,是形容表的,並非是庫 表結構 frm檔案 表資料 myd檔案 my表示myisam,d表示data...

mysql支援的儲存引擎

1 innodb 儲存引擎 支援事務,其設計目標主要面向聯機事務處理 oltp 的應用。其特點是行鎖設計 支援外來鍵,並支援類似 oracle 的非鎖定讀,即預設讀取操作不會產生鎖。從 mysql 5.5.8 版本開始是預設的儲存引擎。innodb 儲存引擎是 mysql 資料庫最為常用的一種引擎具...

不同的儲存引擎支援的索引型別

我們可以在建立上述索引的時候,為其指定索引型別,分兩類 hash型別的索引 查詢單條快,範圍查詢慢 btree型別的索引 b 樹,層數越多,資料量指數級增長 我們就用它,因為innodb預設支援它 不同的儲存引擎支援的索引型別也不一樣 innodb 支援事務,支援行級別鎖定,支援 b tree fu...