Khi bạn có cả LIMIT và ORDER BY, trình tối ưu hóa đã quyết định sẽ nhanh hơn nếu bạn lướt qua các bản ghi chưa được lọc trên foo theo phím giảm dần cho đến khi nó nhận được năm kết quả phù hợp với phần còn lại của tiêu chí. Trong các trường hợp khác, nó chỉ đơn giản là chạy truy vấn dưới dạng một vòng lặp lồng nhau và trả về tất cả các bản ghi.
Nói thẳng ra, tôi muốn nói rằng vấn đề là PG không mò mẫm khớp phân phối các id khác nhau và đó là lý do tại sao kế hoạch là rất tối ưu.
Đối với các giải pháp khả thi:Tôi sẽ giả sử rằng bạn đã chạy ANALYZE gần đây. Nếu không, hãy làm như vậy. Điều đó có thể giải thích tại sao thời gian ước tính của bạn cao ngay cả trên phiên bản trả về nhanh. Nếu sự cố vẫn tiếp diễn, có thể chạy ORDER BY dưới dạng lựa chọn phụ và nhấn vào LIMIT trong một truy vấn bên ngoài.