Bộ tối ưu hóa câu hỏi
Tổng quan
- Quy trình xử lí truy vấn: Câu lệnh SQL --(Phân tích cú pháp)--> biểu thức đại số quan hệ --(bộ tối ưu)--> Bộ sinh mã --> Chương trình tối ưu
- Tối ưu hóa là biến đổi biểu thức đại số quan hệ để tìm một biểu thức hiệu quả hơn
- Tối ưu hóa dựa trên cấu trúc và nội dung của dữ liệu
- 2 kỹ thuật chính:
- Tối ưu logic
- Tối ưu vật lý
- Mục đích:
- Giảm số bản ghi
- Giảm kích thước bản ghi
Tối ưu logic
Biến đổi dựa trên ngữ nghĩa
- Mục đích:
- Dựa trên ràng buộc dữ liệu để xác định biểu thức tương đương
- Viết lại truy vấn dựa trên khung nhìn với các định nghĩa của khung nhìn
Biến đổi dựa trên tính chất phép toán đại số quan hệ
- Khai triển phép chọn dựa trên nhiều điều kiện:
- Hoán vị phép chọn với phép tích Descartes, hợp, trừ, với mục đích đẩy phép chọn thực hiện trước nhằm giảm số bản ghi từ sớm:
- Hoán vị phép chiếu với tích Descartes, hợp với mục đích giảm kích thước bản ghi:
- Nhóm các điều kiện chọn và loại bỏ các phép chiếu dư thừa
Tối ưu vật lý
- Lựa chọn với điều kiện phức AND:
- Ưu tiên điều kiện với thuộc tính có index
- Sử dụng composite index
- Sử dụng phép giao nếu có nhiều index
- Lựa chọn với điều kiện phức OR:
- Không có nhiều khả năng tối ưu
- Sử dụng nếu có index trên tất cả các thuộc tính
- Phép kết nối
- Nested-loop JOIN: chi phí thời gian cao
- Single-loop JOIN: sử dụng khi tồn tại index cho một hoặc cả hai thuộc tính trong điều kiện JOIN
- Sort-merge JOIN: sử dụng khi hai bảng được lưu trữ dưới dạng sorted file, sắp xếp theo thuộc tính điều kiện kết nối
- Partition-hash JOIN: chia bảng thành các giỏ (buckets) và join các giỏ tương ứng