1.雜湊索引 :(hash index)基於雜湊表實現,只有精確匹配到索引列的查詢,才會起到效果。
對於每一行資料,儲存引擎都會對所有的索引列計算出乙個雜湊碼(hash code),雜湊碼是乙個
較小的整數值,並且不同鍵值的行計算出來的雜湊碼也不一樣。
2.只有memory儲存引擎顯式支援雜湊索引,但是原理可以用在偽雜湊索引上
表結構如下:
3.假設會有這樣乙個雜湊函式f(),該返回下面的雜湊碼整數值
f('tao')=2323
f('zhang')=7437
f('li')=8784
4.一張雜湊表,儲存著對應關係,槽編號是循序的,值資料行不是
槽(slot) 值(value)
2323 指向第2行資料
7437 指向第1行資料
8784 指向第3行資料
5.select lname from test_hash where fname='tao'\g;
mysql先計算'tao'的雜湊值,f('tao')=2323,然後根據該值在雜湊索引表中查詢對應的行,找到它指向的是
第2行資料,直接查詢第2行資料,判斷fname是tao,確保正確
6.雜湊衝突:不同的值得到了相同的雜湊碼,例如f('tao')=2323 f('wang')=2323,此時就是出現了雜湊衝突
當出現雜湊衝突時,相同的資料會儲存在鍊錶中,遍歷鍊錶找到符合的。
7.特點:
1)雜湊索引只包含雜湊碼和指標,不儲存資料字段值
2)雜湊索引資料並不是按循序儲存的,因此無法用於排序
3)因為要通過查詢值計算確定的雜湊碼,所以雜湊索引不支援部分匹配,不支援範圍查詢,只支援等值比較查詢
4)當雜湊衝突很多的時候,效率會降低
在innodb儲存引擎上,可以基於上面的原理,實現偽雜湊索引,配合預設的b-tree索引
日常 MySQL的雜湊索引和原理研究測試
1.雜湊索引 hash index 基於雜湊表實現,只有精確匹配到索引列的查詢,才會起到效果。對於每一行資料,儲存引擎都會對所有的索引列計算出乙個雜湊碼 hash code 雜湊碼是乙個 較小的整數值,並且不同鍵值的行計算出來的雜湊碼也不一樣。2.只有memory儲存引擎顯式支援雜湊索引,但是原理可...
mysql 雜湊索引 MySQL索引之雜湊索引
雜湊索引 hash index 建立在雜湊表的基礎上,它只對使用了索引中的每一列的精確查詢有用。對於每一行,儲存引擎計算出了被索引的雜湊碼 hash code 它是乙個較小的值,並且有可能和其他行的雜湊碼不同。它把雜湊碼儲存在索引中,並且儲存了乙個指向雜湊表中的每一行的指標。在mysql中,只有me...
mysql雜湊索引用途 MySQL 雜湊索引
雜湊索引基於雜湊表實現,只有精確匹配索引所有列的查詢才有效。在mysql中只有memory引擎顯示支援雜湊索引,也是memory引擎表的預設索引型別。memory引擎是支援非唯一雜湊索引的。如果多個列的雜湊值相同,索引會以鍊錶 的方式存放多個記錄指標道同乙個雜湊條目中。舉個粒子 create tab...