Bạn có quan niệm sai lầm rằng trình tối ưu hóa viết lại câu lệnh SQL. Đó không phải là tình huống. Viết lại truy vấn là công việc của người viết lại truy vấn , ví dụ như thay thế các khung nhìn bằng định nghĩa của chúng. Trình tối ưu hóa đưa ra một chuỗi các bước thực thi để tính toán kết quả. Nó tạo ra một kế hoạch , không phải là một câu lệnh SQL.
Trình tối ưu hóa lập kế hoạch hai lựa chọn thay thế:thực hiện kế hoạch con 1 cho mỗi hàng được tìm thấy hoặc thực hiện kế hoạch con 2 một lần (lưu ý rằng nó độc lập với a
), xây dựng một bảng băm từ kết quả và thăm dò hàm băm cho mỗi hàng được tìm thấy trong a
.
Tại thời điểm thực thi, PostgreSQL quyết định sử dụng chiến lược thứ hai, đó là lý do tại sao kế hoạch con 1 không bao giờ được thực thi.