Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Có vấn đề gì xảy ra với các phép nối không sử dụng từ khóa JOIN trong SQL hoặc MySQL không?

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 peoplecompanies 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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Giám sát cơ sở dữ liệu của bạn với MySQL Enterprise Monitor

  2. Chuỗi được phân tách bằng dấu phẩy trong MySQL thành bảng tạm thời

  3. CHỈ THAM GIA TRÁI hàng đầu tiên

  4. Các lệnh quản trị cơ sở dữ liệu cơ bản của MySQL - Phần I

  5. Hiểu bộ ký tự và cụm từ trong MySQL