[POSTGRES] Tìm Hiểu Hash Index Trong Database
- Tiếp tục với chủ đề index, để hiểu hơn về
BTree Index
đọc link - Trong bài viết này sẽ tìm hiểu về
Hash Index
Hash Index
- Hash index là được thiết kế cho query data một cách cực nhanh, khi điểu kiện query là
bằng
trên index column nào đó,hash index
có thể làm việc truy vấn data rất nhanh, và đồng thờihash index
cũng xác định trực tiếp vùng lưu trữ dữ liệu mong muốn, chỉ phù hợp cho những tình huốngquery
trên so sánh bằng, như=
orin
. - không như những loại index khác, hash index là khi có một hoạt động thay đổi data
(inserts, updates, and deletes)
thì sẽ cần rehash lại và quá trình này là tốn kém hơnBTree
index. - Để tạo hash index trong postgres, chúng ta sẽ xử dụng
using hash
, ví dụ
CREATE INDEX hash_name ON table_name USING HASH (column_name);
-
câu lệnh trên là thực hiện tại index name
hash_name
trên tabletable_name
-
column_name
là cột muốn index -
Một số điểm cần chú ý khi tạo
hash index
là nó không phù hợp cho việc truy vấn theorange
hoặcsorting
. Với các tình huống kiểu này, thìBTree
sẽ phù hợp hơn. -
Qua đó có thể thấy rằng
hash index
sẽ có những trường hợp cụ thể và giới hạn đem lại lợi ích, phù hợp riêng.
Ví dụ:
- Đọc link để xem cách tạo data test.
- Tạo index bằng statement:
CREATE INDEX idx_info_ref_id_hash ON info USING HASH(uuid);
Kết quả
- với lượng data là 10k record
EXPLAIN ANALYZE
select * from info where uuid = '05aee2f5-aa10-4a15-9e2c-44166380e3a4'
- trước khi tạo hash index:
"Seq Scan on info (cost=0.00..348.00 rows=1 width=148) (actual time=0.076..1.547 rows=1 loops=1)"
"Filter: ((uuid)::text = '05aee2f5-aa10-4a15-9e2c-44166380e3a4'::text)"
"Rows Removed by Filter: 9999"
"Planning Time: 0.302 ms"
"Execution Time: 1.565 ms"
- sau khi tạo index:
"Index Scan using idx_info_ref_id_hash on info (cost=0.00..8.02 rows=1 width=148) (actual time=0.015..0.016 rows=1 loops=1)"
"Index Cond: ((uuid)::text = '05aee2f5-aa10-4a15-9e2c-44166380e3a4'::text)"
"Planning Time: 2.123 ms"
"Execution Time: 0.039 ms"
- với kết quả trên, thì có thể thấy khi đánh hash index kết quả đã nhanh hơn gấp nhiều lần.
Liên Hệ
- facebook: https://www.facebook.com/phucducdev/
- group: https://www.facebook.com/groups/575250507328049
- gmail: ducnp09081998@gmail.com
- linkedin: https://www.linkedin.com/in/phucducktpm/
- hashnode: https://hashnode.com/@OpenDev
- telegram: https://t.me/OpenDevGolang
All rights reserved