Các nhà cung cấp DBMS đã làm việc này trong một thời gian rất, rất dài. Như Rik đã nói, đó là có thể là một vấn đề khó xử, nhưng tôi không nghĩ rằng bất kỳ phân tích chính thức nào về NP-đầy đủ của không gian vấn đề đã được thực hiện.
Tuy nhiên, đặt cược tốt nhất của bạn là tận dụng DBMS càng nhiều càng tốt. Tất cả các hệ thống DBMS dịch SQL thành một số loại kế hoạch truy vấn. Bạn có thể sử dụng kế hoạch truy vấn này, đây là một phiên bản trừu tượng của truy vấn, là điểm khởi đầu tốt (DBMS sẽ làm rất nhiều tối ưu hóa, làm phẳng các truy vấn thành các mô hình khả thi hơn).
LƯU Ý: DBMS hiện đại sử dụng trình phân tích "dựa trên chi phí" không xác định qua các cập nhật thống kê, do đó, người lập kế hoạch truy vấn có thể thay đổi kế hoạch truy vấn cho các truy vấn giống hệt nhau.
Trong Oracle (tùy thuộc vào phiên bản của bạn), bạn có thể yêu cầu trình tối ưu hóa chuyển từ trình phân tích dựa trên chi phí sang phân tích dựa trên quy tắc xác định (điều này sẽ đơn giản hóa phân tích kế hoạch) với gợi ý SQL, ví dụ:
SELECT /*+RULE*/ FROM yourtable
Trình tối ưu hóa dựa trên quy tắc đã không được dùng vì 8i nhưng vẫn bị treo xung quanh 10g (Tôi không biết 'bout 11). Tuy nhiên, bộ phân tích dựa trên quy tắc ít phức tạp hơn nhiều: tỷ lệ lỗi có khả năng cao hơn nhiều.
Để đọc thêm về bản chất chung chung hơn, IBM đã khá sung mãn với bằng sáng chế tối ưu hóa truy vấn của họ. Điều này ở đây trên một phương pháp để chuyển đổi SQL thành "kế hoạch trừu tượng" là một điểm khởi đầu tốt: http://www.patentstorm.us/patents/7333981.html
Nguồn
2008-09-11 18:42:58
Tôi giả sử bạn có nghĩa là tập hợp kết quả chính xác. Điều đó có nghĩa là các cột giống nhau (và cùng một kiểu dữ liệu) với cùng một dữ liệu hàng. Chính xác? – Craig
Đúng, đúng vậy Craig –