眾所周知,InnoDB使用的索引結構是B+樹,但其實它還支持另一種索引:自適應哈希索引。
創新新互聯,憑借10年的成都網站建設、網站建設經驗,本著真心·誠心服務的企業理念服務于成都中小企業設計網站有上千家案例。做網站建設,選成都創新互聯。
哈希表是數組+鏈表的形式。通過哈希函數計算每個節點數據中鍵所對應的哈希桶位置,如果出現哈希沖突,就使用拉鏈法來解決。更多內容可以參考 百度百科-哈希表
從以上可以知道,哈希表查找最優情況下是查找一次.而InnoDB使用的是B+樹,最優情況下的查找次數根據層數決定。因此為了提高查詢效率,InnoDB便允許使用自適應哈希來提高性能。
可以通過參數 innodb_adaptive_hash_index 來決定是否開啟。阿里云默認是關閉的。
MySQL>show variables like '%innodb_adaptive_hash_index%' +----------------------------------+-----------------+ | Variable_name | Value | +----------------------------------+-----------------+ | innodb_adaptive_hash_index | OFF | | innodb_adaptive_hash_index_parts | 8 | +----------------------------------+-----------------+
存儲引擎會自動對個索引頁上的查詢進行監控,如果能夠通過使用自適應哈希索引來提高查詢效率,其便會自動創建自適應哈希索引,不需要開發人員或運維人員進行任何設置操作。
自適應哈希索引是對innodb的緩沖池的B+樹頁進行創建,不是對整張表創建,因此速度很快。
可以通過查看innodb的status來查看自適應哈希索引的使用情況。
INSERT BUFFER AND ADAPTIVE HASH INDEX ------------------------------------- Ibuf: size 1, free list len 6236, seg size 6238, 50367801 merges merged operations: insert 78512159, delete mark 0, delete 0 discarded operations: insert 0, delete mark 0, delete 0 Hash table size 13148407, node heap has 0 buffer(s) Hash table size 13148407, node heap has 0 buffer(s) Hash table size 13148407, node heap has 0 buffer(s) Hash table size 13148407, node heap has 0 buffer(s) Hash table size 13148407, node heap has 0 buffer(s) Hash table size 13148407, node heap has 0 buffer(s) Hash table size 13148407, node heap has 0 buffer(s) Hash table size 13148407, node heap has 0 buffer(s) 0.00 hash searches/s, 67793.48 non-hash searches/s
可以看到自適應哈希索引的大小,以及使用情況。
注意: 從哈希表的特性來看,自適應哈希索引只能用于等值查詢,范圍或者大小是不允許的。
等值查詢: select * from xx where name = "xxx";
本文標題:Innodb關鍵特性之AdaptiveHashIndex
新聞來源:http://vcdvsql.cn/article10/pcosdo.html
成都網站建設公司_創新互聯,為您提供網站營銷、企業建站、營銷型網站建設、品牌網站建設、網站內鏈、App開發
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯