Có quy tắc chung cho nhà phát triển khi sử dụng tham gia thay vì truy vấn phụ hay không.Tham gia truy vấn hoặc truy vấn phụ
Trả lời
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.
Về mặt lý thuyết, mọi truy vấn con có thể được thay đổi thành truy vấn tham gia.
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.
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).
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
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
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.
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.
- 1. Trình tạo truy vấn thông thạo Laravel Tham gia với truy vấn phụ
- 2. 2 Chọn hoặc 1 Tham gia truy vấn?
- 3. SQL tham gia xây dựng truy vấn
- 4. Tham gia hai sql truy vấn
- 5. CursorLoader - Hai bảng tham gia truy vấn?
- 6. phức tạp tham gia truy vấn
- 7. các truy vấn con vs tham gia
- 8. MYSQL - Xóa truy vấn với Tham gia
- 9. LEFT Tham gia các vấn đề truy vấn với
- 10. MYSQL truy vấn, tham gia 2 bảng của vấn đề
- 11. Giao dịch-SQL - truy vấn phụ hoặc tham gia bên trái?
- 12. Tham gia hai truy vấn con trong MySQL
- 13. truy vấn cập nhật mysql với truy vấn phụ
- 14. Cột truy vấn cha tham chiếu trong truy vấn phụ (Oracle)
- 15. Truy vấn hai bảng liên quan (Tham gia)
- 16. Cách tham gia vào Truy vấn WMI (WQL)
- 17. JPA truy vấn trên một bảng tham gia
- 18. Xóa bằng "Tham gia" trong Oracle sql Truy vấn
- 19. LINQ to Entities ba bảng tham gia truy vấn
- 20. Tham gia truy vấn và khi quá nhiều
- 21. Bắt lỗi khi sử dụng tham gia vào truy vấn
- 22. Mysql truy vấn để tham gia ba bảng
- 23. Truy vấn SQL cho Tham gia bên trong với Chọn
- 24. Tối ưu hóa truy vấn SQLite3 tham gia vs subselect
- 25. Nhiều lần tham gia trong truy vấn Khung thực thể
- 26. truy vấn cập nhật với tham gia trên hai bảng
- 27. thuyết 2 xây dựng truy vấn và tham gia bảng
- 28. Tham gia hàm giá trị bảng vào truy vấn MSSQL
- 29. Truy vấn SQL với Tham gia, Đếm và ở đâu
- 30. Chèn truy vấn với tham gia bên trong
Đ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