Người lập kế hoạch không quyết định sử dụng một chiến lược tham gia nhất định dựa trên lý luận sâu sắc, mà chỉ đơn giản là xây dựng tất cả các chiến lược tham gia có thể có, ước tính chi phí và chọn chiến lược rẻ nhất.
Điều đó nói rằng, các phép nối vòng lặp lồng nhau thường là lựa chọn tốt nhất nếu bảng bên ngoài nhỏ, để vòng lặp bên trong không phải thực thi thường xuyên. Ngoài ra, một chỉ mục về điều kiện kết hợp của bảng bên trong có thể làm giảm đáng kể chi phí của một phép nối vòng lặp lồng nhau và làm cho nó trở thành một chiến lược hấp dẫn.
Trong trường hợp của bạn, lựa chọn tồi là do ước tính sai:
Foreign Scan on wind_forecast_recent w (cost=... rows=1 ...) (actual ... rows=7 ...)
Điều đó làm cho vòng lặp bên trong được thực thi 7 lần thay vì một lần, do đó thời gian thực hiện là 70 giây thay vì 10 giây.
Bạn nên thu thập thống kê bảng trên wind_forecast_recent
:
ANALYZE wind_forecast_recent;
Hãy nhớ rằng tự động phân tích không không trị bàn nước ngoài; bạn phải tự mình lo liệu điều đó.
Nếu điều đó không hiệu quả, bạn có thể thử đặt use_remote_estimate
trên bảng ngoại và đảm bảo rằng thống kê bảng là chính xác trên cơ sở dữ liệu từ xa.