Erwin: Tôi sẽ đồng tình với ý kiến rằng việc SỬ DỤNG gây ra trật tự cứng nhắc cũng có thể tạo ra nhiều trường hợp cạnh mà kế hoạch tối ưu sẽ bị loại trừ. Gần đây tôi đã giúp ai đó có một cái gì đó như thế này trong truy vấn của mình:
LEFT JOIN (
a
JOIN b ON a.id = b.a_id
JOIN c ON b.c_id = c.id
) ON a.id = something.a_id
LEFT JOIN (
table1 t1
JOIN table2 t2 ON t1.some_field = t2.other_field
JOIN talbe3 t3 ON t2.yafield = t3.something_else
) ON ....
repeat a few more times
Trong trường hợp của anh ta, các khối tham gia tồi tệ nhất đã gây ra một vòng lặp lồng nhau thông qua một số hàng 200 nghìn, khoảng 20 nghìn lần (làm toán) và vì các khóa không thể được đẩy lên chỉ mục, đó là một lần quét liên tiếp. Điều này có nghĩa là truy vấn tổng thể mất khoảng 3 giờ để chạy do thay đổi kế hoạch xếp tầng. Bằng cách phân phối nối trái, các phím có thể được đẩy xuống và truy vấn chạy trong vài giây. Tất nhiên điều này không hoàn toàn tương đương, đó là lý do tại sao người lập kế hoạch không thể coi họ là tương đương và do đó, người ta đã nghĩ ra kế hoạch đó như là một phép nối băm và sau đó thực hiện một vòng lặp lồng vào nhau, rất chậm.
Bất cứ khi nào bạn cứng nhắc buộc các liên kết phải thực hiện theo một thứ tự nhất định, bạn sẽ đưa ra các trường hợp trong đó thông tin bộ lọc chính có thể chưa có sẵn trong quá trình thực hiện kế hoạch, và vì vậy có thể làm gì sau này trong việc quét / băm chỉ mục nhanh có thể phải được thực hiện chậm hơn nhiều trong quá trình quét vòng lặp / tuần tự lồng nhau và do đó, trong khi đoạn trên không tương đương ngay lập tức, nó cho thấy vấn đề tương tự.
USING
một chút - vì nó dẫn đến một cột ít hơn trong ma trận kết quả. Phát hiện của bạn bắt đầu từ năm 2005 và 2008. Tôi cho rằng mọi vấn đề đã được khắc phục. Tuy nhiên , tôi có thể thấy một giới hạn có thể có: THAM GIA với có thể phải được áp dụng theo thứ tự , vì cột kết quả là một sản phẩm chung. Do đó có khả năng hạn chế các tùy chọn sắp xếp lại THAM GIA.USING