2013-02-20 20 views
10

Giả sử tôi có truy vấn sau đây. Nếu không có kết quả phù hợp khi tham gia t1 và t2, tất cả các kết nối khác đều bị bỏ qua bởi MySQL?SQL JOIN có nên được đặt theo thứ tự cụ thể vì lý do hiệu suất không?

Lý do tôi hỏi là nếu không, sau đó tôi sẽ chia nhỏ truy vấn và sử dụng PHP để ghép nó lại với nhau. Nếu không có hit hiệu suất, sau đó tôi sẽ chỉ đặt JOIN của tôi theo thứ tự như vậy mà không tiếp tục một lần JOIN trước đó không thực hiện. Cảm ơn

SELECT whatever 
FROM t1 
INNER JOIN t2 ON t2.t1id=t1.id 
INNER JOIN t3 ON t3.t2id=t2.id 
INNER JOIN t4 ON t4.t3id=t3.id 
INNER JOIN t5 ON t5.t4id=t4.id 
INNER JOIN t6 ON t6.t5id=t5.id 
INNER JOIN t7 ON t7.t6id=t6.id 
INNER JOIN t8 ON t8.t7id=t7.id 
INNER JOIN t9 ON t9.t8id=t8.id 
WHERE t1.c=123 AND t4.c=321 AND t6.c=222 AND t9.c=222 
+0

Để tham chiếu đến bất kỳ ai khác trên toàn bộ con đường này như tôi đã làm ... http://stackoverflow.com/questions/1018822/inner-join-on-vs-where-clause cung cấp rất nhiều chi tiết về sự khác biệt và lợi ích. – JeopardyTempest

Trả lời

14

documentation cho trạng thái MySQL "Trình tối ưu hóa tham gia tính toán thứ tự các bảng sẽ được tham gia".

Đơn đặt hàng này được xác định dựa trên thông tin về kích thước của bảng và các yếu tố khác, chẳng hạn như sự hiện diện của chỉ mục.

Bạn nên đặt các kết nối theo thứ tự có ý nghĩa nhất để đọc và duy trì truy vấn.

+0

Cảm ơn Gordon. Vì vậy, nó không quan trọng mà thứ tự "tôi" đặt nó trong kể từ khi MySQL sẽ làm điều đó cho tôi. Có một cơ hội mà MySQL sẽ đặt chúng theo một thứ tự khác hơn là tôi liệt kê chúng, điều này sẽ khiến chúng bị xử tử? – user1032531

+2

MySQL sẽ thực hiện tất cả các kết nối. Nếu bạn có các chỉ mục trên các cột id trong các bảng khác, thì công cụ sẽ sử dụng chỉ mục và hiệu suất sẽ không phải là vấn đề. –

+1

Cảm ơn bạn đã trích dẫn tài liệu! – Sonny

1

Tôi đoán là sẽ không có hiệu suất. Trình tối ưu hóa truy vấn nên xác định rằng việc nối giữa t2 và t1 không hợp lệ và giải quyết tất cả các phụ thuộc tham gia vào một giá trị không đổi có nghĩa là chúng sẽ không được đánh giá.

+0

Cảm ơn Steve. Tôi đoán là giống như của bạn. Bạn nghĩ bạn khỏe không? – user1032531

Các vấn đề liên quan