Lọc tham gia chỉ bằng WHERE có thể vô cùng không hiệu quả trong một số trường hợp phổ biến.Ví dụ:
SELECT * FROM people p, companies c WHERE p.companyID = c.id AND p.firstName = 'Daniel'
Hầu hết các cơ sở dữ liệu sẽ thực hiện truy vấn này theo đúng nghĩa đen, đầu tiên lấy sản phẩm Descartes của nhân dân và bảng công ty và sau đó lọc theo những người mà có phù hợp với lĩnh vực companyID và id. Trong khi sản phẩm hoàn toàn không bị giới hạn không tồn tại ở bất cứ nơi nào nhưng trong bộ nhớ và sau đó chỉ trong một khoảnh khắc, tính toán của nó mất một thời gian.
Một cách tiếp cận tốt hơn là nhóm các ràng buộc bằng JOIN khi có liên quan. Điều này không chỉ dễ đọc hơn mà còn hiệu quả hơn rất nhiều. Thusly:
SELECT * FROM people p JOIN companies c ON p.companyID = c.id
WHERE p.firstName = 'Daniel'
Đó là lâu hơn một chút, nhưng cơ sở dữ liệu có khả năng nhìn vào mệnh đề ON và sử dụng nó để tính toán đầy đủ chế THAM GIA trực tiếp, chứ không phải bắt đầu với tất cả mọi thứ và sau đó hạn chế xuống. Điều này nhanh hơn để tính toán (đặc biệt là với các tập dữ liệu lớn và/hoặc tham gia nhiều bảng) và yêu cầu ít bộ nhớ hơn.
Tôi thay đổi mọi truy vấn tôi thấy sử dụng cú pháp "dấu phẩy". Theo tôi, mục đích duy nhất cho sự tồn tại của nó là sự đồng nhất. Xem xét tác động hiệu suất, tôi không nghĩ đây là một lý do thuyết phục.
Nguồn
2016-12-21 05:15:52
Đồng ý, đầu tiên là tốt hơn cho rõ ràng và controle; dễ dàng thay đổi loại tham gia nếu bạn muốn. –