“Quét đống bitmap” trong kế hoạch truy vấn là gì?


112

Tôi muốn biết nguyên tắc của "Bitmap heap scan", tôi biết điều này thường xảy ra khi tôi thực hiện truy vấn với ORtrong điều kiện.

Ai có thể giải thích nguyên tắc đằng sau "quét đống bitmap"?

Câu trả lời:


121

Lời giải thích tốt nhất đến từ Tom Lane , tác giả của thuật toán trừ khi tôi nhầm. Xem thêm bài viết trên wikipedia .

Tóm lại, nó hơi giống như quét seq. Sự khác biệt là, thay vì truy cập mọi trang đĩa, chỉ mục bitmap sẽ quét AND và OR các chỉ mục áp dụng cùng nhau và chỉ truy cập các trang đĩa mà nó cần.

Điều này khác với quét chỉ mục, trong đó chỉ mục được truy cập từng hàng theo thứ tự - nghĩa là một trang đĩa có thể được truy cập nhiều lần.


Re: câu hỏi trong bình luận của bạn ... Yep, chính xác là vậy.

Quá trình quét chỉ mục sẽ đi qua từng hàng một, mở đi mở lại các trang đĩa nhiều lần nếu cần thiết (một số tất nhiên sẽ nằm trong bộ nhớ, nhưng bạn hiểu rõ).

Quét chỉ mục bitmap sẽ tuần tự mở danh sách ngắn các trang đĩa và lấy mọi hàng thích hợp trong mỗi hàng (do đó, cái gọi là kiểm tra lại điều kiện bạn thấy trong kế hoạch truy vấn).

Ngoài ra, hãy lưu ý, cách phân cụm / thứ tự hàng ảnh hưởng đến chi phí liên quan với một trong hai phương pháp. Nếu các hàng ở khắp nơi theo thứ tự ngẫu nhiên, chỉ mục bitmap sẽ rẻ hơn. (Và, trên thực tế, nếu họ thực sự tất cả khắp nơi, một seq quét sẽ rẻ nhất, kể từ khi một chỉ số bitmap quét là không phải không có số nguyên cần thiết.)


Vì vậy, "Quét đống bitmap": Một trang không thể được truy cập nhiều hơn một lần! nhưng "Có thể lập chỉ mục": Một trang có thể được truy cập nhiều lần, vì chỉ mục được truy cập từng hàng theo thứ tự.
francs

Có thể có liên quan đến bộ nhớ đệm khi các trang được truy cập nhiều lần: trang sẽ thực sự được tải từ đĩa lần đầu tiên (chậm) và truy cập sâu hơn sẽ chạm vào bộ nhớ đệm trong bộ nhớ (bộ đệm Postgres (nhanh) hoặc bộ đệm hệ điều hành (nhanh hơn)) .
Matthieu

Ngoài ra còn có thời index-only scanđiểm chỉ cột được lập chỉ mục được truy cập trong truy vấn. trong trường hợp này, index-only scankhông cần truy cập dữ liệu heap (trang dữ liệu): postgresql.org/docs/12/indexes-index-only-scans.html
Alan
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.