Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình

Triển Khai Tối Ưu Hóa Bitmap Filtering (Optimized Bitmap Filtering Implementation)


Bitmap filter chỉ có lợi khi nó có tính chọn lọc (selective). Query optimizer quyết định khi nào optimized bitmap filter đủ chọn lọc để hữu ích và áp dụng filter cho toán tử nào. Optimizer đặt optimized bitmap filters trên tất cả các nhánh của star join và sử dụng quy tắc costing (chi phí) để quyết định xem plan có cung cấp chi phí thực thi ước tính nhỏ nhất hay không.

Khi optimized bitmap filter không chọn lọc (nonselective), ước tính chi phí thường quá cao và plan bị loại bỏ. Khi xem xét nơi đặt optimized bitmap filters trong plan, optimizer tìm kiếm các biến thể hash join bao gồm right-deep stack của hash joins. Joins với dimension tables được thực hiện để thực hiện join chọn lọc nhất có thể trước.

Toán tử mà optimized bitmap filter được áp dụng chứa bitmap predicate theo dạng: PROBE ([Opt_Bitmap1001], {[column_name]} [, 'IN ROW']). Bitmap predicate báo cáo thông tin sau:

  • Tên bitmap tương ứng với tên được giới thiệu trong Bitmap operator. Tiền tố 'Opt_' chỉ ra optimized bitmap filter được sử dụng.
  • Cột được probe (thăm dò) đối với. Đây là thuật ngữ từ đó dữ liệu được lọc chảy qua cây.
  • Có bitmap probe yêu cầu in-row optimization không. Khi có, bitmap probe được triệu hồi với tham số IN ROW. Ngược lại, tham số này vắng mặt.

Yêu Cầu Của Optimized Bitmap Filtering

  • Fact tables kỳ vọng có tối thiểu 100 pages. Optimizer coi các bảng nhỏ hơn là dimension tables.
  • Chỉ inner joins giữa fact table và dimension table được xem xét.
  • Join predicate giữa fact table và dimension table phải là single column join nhưng không nhất thiết là quan hệ primary-key-to-foreign-key. Cột dựa trên integer được ưu tiên.
  • Joins với dimensions chỉ được xem xét khi dimension input cardinalities nhỏ hơn input cardinality từ fact table.

Bitmap filtering và optimized bitmap filtering được thực thi trong query plan bằng cách sử dụng bitmap show plan operator. Bitmap filtering chỉ dùng trong parallel query plans nơi hash hoặc merge joins được dùng. Optimized bitmap filtering chỉ liên quan đến parallel query plans nơi hash joins được dùng.

Trong cả hai trường hợp, bitmap filter được tạo trên build input (dimension table) side của hash join; tuy nhiên, việc lọc thực tế thường hoàn thành trong Parallelism operator, nằm trên probe input (fact table) side của hash join. Khi join dựa trên cột integer, filter có thể được áp dụng trực tiếp đến original table hoặc index scan operation thay vì Parallelism operator. Kỹ thuật này được gọi là in-row optimization.