Lọc kết hợp chỉ sử dụng WHERE
có thể cực kỳ kém 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 thi truy vấn này theo đúng nghĩa đen, trước tiên lấy sản phẩm Descartes
của people
và companies
bảng và sau đó lọc theo những người có companyID
phù hợp và id
lĩnh vực. Mặc dù sản phẩm hoàn toàn không bị giới hạn không tồn tại ở bất kỳ đâu ngoài bộ nhớ và sau đó chỉ trong chốc lát, việc tính toán của nó sẽ mất một khoảng thời gian.
Một cách tiếp cận tốt hơn là nhóm các ràng buộc với JOIN
s ở nơi có liên quan. Điều này không chỉ dễ đọc hơn về mặt chủ quan mà còn hiệu quả hơn rất nhiều. Như vậy:
SELECT * FROM people p JOIN companies c ON p.companyID = c.id
WHERE p.firstName = 'Daniel'
Còn lâu hơn một chút, nhưng cơ sở dữ liệu có thể xem ON
và sử dụng nó để tính toán JOIN
được ràng buộc đầy đủ trực tiếp, thay vì bắt đầu với mọi thứ và sau đó hạn chế xuống. Tính toán này nhanh hơn (đặc biệt là với các tập dữ liệu lớn và / hoặc các phép nối 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 "dấu phẩy JOIN
"cú pháp. Theo tôi, mục đích duy nhất cho sự tồn tại của nó là sự ngắn gọn. Xem xét tác động hiệu suất, tôi không nghĩ đây là lý do thuyết phục.