HASH索引只支援等值查詢。由於HASH索引只儲存HASH值,不會儲存實際的索引索引值,所以適合欄位長度較長,且欄位選擇性好的等值查詢情境。
索引結構

HASH值轉換,HASH值對應到某個bucket。
bucket數量為2的N次方。
metapage包含索引內部的相關資訊。
每個bucket內至少一個primary page。
page中存放的是HASH值。
overflow page不足一個page時作為bucket使用。
bitmap page用於跟蹤當前乾淨的overflow page。
操作符
HASH索引只支援=的操作符,意味著HASH索引只適合於等值查詢的情境。
查詢語句
SELECT * FROM test WHERE id=1;建立HASH索引
CREATE INDEX ON test USING hash(id);查看執行計畫
EXPLAIN SELECT * FROM test WHERE id=1; QUERY PLAN ------------------------------------------------------------------------- Index Scan using test_id_idx on test (cost=0.00..8.02 rows=1 width=10) Index Cond: (id = 1) (2 rows)
樣本
表結構
CREATE TABLE test(id int,name text);插入資料
INSERT INTO test SELECT id,md5(id::text)||md5(id::text)||md5(id::text)||md5(id::text) FROM generate_series(1,3000000) t(id);建立HASH索引
CREATE INDEX idx_test_hash ON test USING hash (name);建立BTREE索引
CREATE INDEX idx_test_btree on test(name);查詢語句
SELECT * FROM test WHERE name='c4ca4238a0b923820dcc509a6f75849bc4ca4238a0b923820dcc509a6f75849bc4ca4238a0b923820dcc509a6f75849bc4ca4238a0b923820dcc509a6f75849b';
索引類型 | 索引大小 | 查詢時間 |
HASH索引 | 224 MB | 0.029 ms |
BTREE索引 | 491 MB | 0.103 ms |