2009-03-18 38 views

Trả lời

2

Phụ thuộc vào RDBMS. Bạn nên so sánh các kế hoạch thực hiện cho cả hai truy vấn.

Theo kinh nghiệm của tôi với Oracle 10 và 11, kế hoạch thực hiện luôn giống nhau.

2

Về mặt lý thuyết, mọi truy vấn con có thể được thay đổi thành truy vấn tham gia.

+0

Điều đó có đúng với các truy vấn phụ có liên quan không? Tại sao bạn đủ điều kiện với "lý thuyết"? Bạn có thể hoàn thành câu trả lời cho câu hỏi không? – dkretz

3

Hiệu suất khôn ngoan, chúng không có bất kỳ sự khác biệt nào trong hầu hết các động cơ DB hiện đại.

3

Vấn đề với truy vấn phụ là bạn có thể kết thúc có một kết quả phụ mà không có bất kỳ khóa nào, vì vậy việc kết hợp chúng sẽ đắt hơn.

Nếu có thể, luôn cố gắng thực hiện truy vấn JOIN và lọc với mệnh đề ON, thay vì WHERE (mặc dù nó giống nhau, vì động cơ hiện đại được tối ưu hóa cho điều này).

2

Cũng như nhiều thứ, nó phụ thuộc. - làm thế nào phức tạp là subquery - trong một truy vấn như thế nào thường là subquery thực hiện

tôi cố gắng tránh các truy vấn con bất cứ khi nào tôi có thể. Đặc biệt khi mong đợi các bộ kết quả lớn không bao giờ sử dụng các truy vấn con - trong trường hợp truy vấn con được thực hiện cho mỗi mục của tập kết quả.

chăm lo, Alex

1

Trong SQL Server một subquery tương quan thường thực hiện tồi tệ hơn một tham gia hoặc, thường thậm chí tốt hơn cho hiệu suất, một tham gia vào một bảng có nguồn gốc. Tôi gần như không bao giờ viết một truy vấn phụ cho bất cứ điều gì mà sẽ phải được thực hiện nhiều lần. Điều này là do các truy vấn con tương quan thường về cơ bản biến truy vấn của bạn thành một con trỏ và chạy một hàng tại một thời điểm. Trong cơ sở dữ liệu, tốt hơn nên làm mọi thứ theo kiểu thiết lập

2

Hãy bỏ qua tác động hiệu suất ngay bây giờ (như chúng ta nên biết rằng "Tối ưu hóa sớm là gốc rễ của mọi điều ác").

Chọn nội dung trông rõ ràng hơn và dễ bảo trì hơn.

5

Nguyên tắc đầu tiên là "Trạng thái truy vấn chính xác". Nguyên tắc thứ hai là "nhà nước truy vấn đơn giản và rõ ràng" (đó là nơi bạn thường lựa chọn). Thứ ba là "nhà nước truy vấn để nó sẽ xử lý hiệu quả".

Nếu một dbms của nó với một bộ xử lý truy vấn tốt, thiết kế truy vấn tương đương nên kết quả trong các kế hoạch truy vấn giống nhau (hoặc ít nhất hiệu quả như nhau).

Nỗi thất vọng lớn nhất của tôi khi sử dụng MySQL lần đầu tiên là làm thế nào có ý thức tôi phải dự đoán trình tối ưu hóa. Sau nhiều năm kinh nghiệm với Oracle, SQL Server, Informix, và các sản phẩm dbms khác, tôi rất ít khi dự kiến ​​sẽ quan tâm đến bản thân mình với những vấn đề như vậy. Bây giờ tốt hơn với các phiên bản mới hơn của MySQL, nhưng nó vẫn là thứ mà tôi cần chú ý thường xuyên hơn so với các phiên bản khác.

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