少年阿賓

          那些青春的歲月

            BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
            500 Posts :: 0 Stories :: 135 Comments :: 0 Trackbacks

          常用鏈接

          留言簿(22)

          我參與的團(tuán)隊

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

              哈希(hash)是一種非常快的查找方法,一般情況下查找的時間復(fù)雜度為O(1)。常用于連接(join)操作,如SQL Server和Oracle中的哈希連接(hash join)。但是SQL Server和Oracle等常見的數(shù)據(jù)庫并不支持哈希索引(hash index)。MySQL的Heap存儲引擎默認(rèn)的索引類型為哈希,而InnoDB存儲引擎提出了另一種實現(xiàn)方法,自適應(yīng)哈希索引(adaptive hash index)。

          InnoDB存儲引擎會監(jiān)控對表上索引的查找,如果觀察到建立哈希索引可以帶來速度的提升,則建立哈希索引,所以稱之為自適應(yīng)(adaptive)的。自適應(yīng)哈希索引通過緩沖池的B+樹構(gòu)造而來,因此建立的速度很快。而且不需要將整個表都建哈希索引,InnoDB存儲引擎會自動根據(jù)訪問的頻率和模式來為某些頁建立哈希索引。

          根據(jù)InnoDB的官方文檔顯示,啟用自適應(yīng)哈希索引后,讀取和寫入速度可以提高2倍;對于輔助索引的連接操作,性能可以提高5倍。在我看來,自適應(yīng)哈希索引是非常好的優(yōu)化模式,其設(shè)計思想是數(shù)據(jù)庫自優(yōu)化(self-tuning),即無需DBA對數(shù)據(jù)庫進(jìn)行調(diào)整。

          通過命令SHOW ENGINE INNODB STATUS可以看到當(dāng)前自適應(yīng)哈希索引的使用狀況,如下所示:

          1. mysql> show engine innodb status\G;  
          2. *************************** 1. row ***************************  
          3. Status:   
          4. =====================================  
          5. 090922 11:52:51 INNODB MONITOR OUTPUT 
          6. =====================================  
          7. Per second averages calculated from the last 15 seconds  
          8. ......  
          9. -------------------------------------  
          10. INSERT BUFFER AND ADAPTIVE HASH INDEX  
          11. -------------------------------------  
          12. Ibuf: size 2249, free list len 3346, seg size 5596,  
          13. 374650 inserts, 51897 merged recs, 14300 merges  
          14. Hash table size 4980499, node heap has 1246 buffer(s)  
          15. 1640.60 hash searches/s, 3709.46 non-hash searches/s  
          16. ...... 

          現(xiàn)在可以看到自適應(yīng)哈希索引的使用信息了,包括自適應(yīng)哈希索引的大小、使用情況、每秒使用自適應(yīng)哈希索引搜索的情況。值得注意的是,哈希索引只能用來搜索等值的查詢,如select * from table where index_col = 'xxx',而對于其他查找類型,如范圍查找,是不能使用的。因此,這里出現(xiàn)了non-hash searches/s的情況。用hash searches : non-hash searches命令可以大概了解使用哈希索引后的效率。

          由于自適應(yīng)哈希索引是由InnoDB存儲引擎控制的,所以這里的信息只供我們參考。不過我們可以通過參數(shù)innodb_adaptive_hash_index來禁用或啟動此特性,默認(rèn)為開啟。

           

           

          轉(zhuǎn)自http://www.cnblogs.com/ylqmf/archive/2011/09/16/2179166.html

          posted on 2014-12-24 18:25 abin 閱讀(1174) 評論(0)  編輯  收藏 所屬分類: mysql
          主站蜘蛛池模板: 古田县| 兰坪| 崇明县| 合肥市| 襄垣县| 沙坪坝区| 都安| 满城县| 奈曼旗| 彭阳县| 沁水县| 司法| 雷波县| 辽宁省| 周至县| 绩溪县| 宣威市| 青岛市| 木里| 锡林浩特市| 札达县| 滦南县| 汝州市| 普定县| 略阳县| 包头市| 黑山县| 黄梅县| 陇川县| 固原市| 青铜峡市| 斗六市| 鄂托克前旗| 宁远县| 合山市| 柘荣县| 湖州市| 阜阳市| 太原市| 会泽县| 金山区|