自適應哈希索引采用之前討論的哈希表的方式實現,不同的是,這僅是數據庫自身創建並使用的,DBA本身並不能對其進行干預。自適應哈希索引近哈希函數映射到一個哈希表中,因此對於字典類型的查找非常快速,如SELECT * FROM TABLE WHERE index_col='xxx'但是對於范圍查找就無能為力。通過SHOW ENGINE INNODB STATUS 可以看到當前自適應哈希索引的使用情況
------------------------------------- INSERT BUFFER AND ADAPTIVE HASH INDEX ------------------------------------- Ibuf: size 1, free list len 0, seg size 2, 94 merges merged operations: insert 280, delete mark 0, delete 0 discarded operations: insert 0, delete mark 0, delete 0 Hash table size 4425293, node heap has 1337 buffer(s) 174.24 hash searches/s, 169.49 non-hash searches/s
現在可以看到自適應哈希索引的使用信息了。包括自適應哈希索引的大小、使用情況,每秒使用自適應哈希索引搜索的情況。需要注意的是,哈希索引只能用來搜索等值的查詢,如
SELECT * FROM table WHERE index_col='xxx'
而對於其他查找類型,如范圍查找,是不能使用哈希索引的。因此這里出現no--hash searches的情況,通過hash searches:non-hash searches可以大概了解使用哈希索引后的效率
由於自適應哈希索引是由InnoDB存儲引擎自己控制的,因此這里的這些信息只僅供參考。不過可以通過參數innodb_adaptive_hash_index來禁用或啟動此特性,默認是開啟