- vừa được xem lúc

[POSTGRES] Tìm Hiểu Hash Index Trong Database

0 0 13

Người đăng: Open Dev

Theo Viblo Asia

  • 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ời hash 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ống query trên so sánh bằng, như = or in.
  • 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ơn BTree 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 table table_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 theo range hoặc sorting. 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.

Bình luận

Bài viết tương tự

- vừa được xem lúc

Mysql index strategy

Trong Mysql, index hỗ trợ việc tìm kiếm các rows theo từng giá trị của các columns trong bảng trở nên nhanh chóng. Việc tìm kiếm sẽ phải scan toàn bộ table nếu các column trong câu query không được đánh index một cách thích hợp. . .

0 0 65

- vừa được xem lúc

Mẹo SEO Cơ Bản Giúp Website Của Bạn Được Lập Chỉ Mục Nhanh Hơn

Hướng dẫn 10 mẹo cơ bản giúp các bạn SEOer mới dễ dàng hơn trong việc lập chỉ mục nội dung của website mới. Khi bạn cập nhật những bài viết mới trong khoảng thời gian đầu tiền của trang web sẽ rất mất

0 0 51

- vừa được xem lúc

MySQL Performance Tuning With Index

Lâu rồi không viết bài trên viblo nên để cái tiêu đề hơi công nghiệp =)) Xin chào các bạn, đợt rồi mình mới được làm vài task cải thiện thiện tốc độ truy vấn mysql nên hôm nay xin phép chia sẻ lại chú

0 0 86

- vừa được xem lúc

Tăng tốc database phần 1 index - khái niệm cơ bản

Phần đầu tiên trong chuỗi bài là các phần liên quan tới database, nhiều bạn thích trình bày các vấn đề khác về database tuy nhiên theo kinh nghiệm cá nhân mình thấy hiểu về index trong db rất quan trọ

0 0 42

- vừa được xem lúc

Tăng tốc database index phần 2 - Leaf Nodes

Đầu tiên mình định dịch ra là nút lá, nhưng nghe nó không được hay cho lắm nên quyết định giữ nguyên tên của nó là Leaf Nodes. Giải pháp để khắc phục vấn đề này là mấy ông làm ra cơ sở dữ liệu sẽ khôn

0 0 35

- vừa được xem lúc

Tăng tốc database index phần 3 - B-Tree

Index leaf node được lưu trữ theo dạng Linked List về mặt logic, còn về cấu trúc lưu trữ vật lý, mỗi leaf node có thể lưu lung tung, không có thứ tự gì, nó giống một quyền từ điển mà các trang bị xáo

0 0 44