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

Chỉ chọn hàng mẹ nếu hàng đó không có hàng con

SELECT id FROM A LEFT OUTER JOIN B ON A.id=B.id WHERE B.id IS NULL

bạn có thể làm được việc này. kết nối bên ngoài sẽ mang lại một chút hiệu suất, nhưng không nhiều.

hệ thống cơ sở dữ liệu mới có thể sẽ tối ưu hóa truy vấn của bạn để không có bất kỳ sự khác biệt nào.

cách chính xác ở đây là bộ nhớ đệm! thử bộ lưu trữ truy vấn và bộ nhớ đệm cấp ứng dụng nếu có thể.

tất nhiên bạn cần các chỉ mục thích hợp.

và ý tôi là trên cả hai bảng và tốt nhất là chỉ mục băm vì nó sẽ có thời gian tra cứu tĩnh so với bất kỳ cây nào có logarit

Hãy thử giải thích trước truy vấn để xem điều gì thực sự làm chậm quá trình này.

nếu bạn thực sự cần quá trình này nhanh chóng, bạn có thể xác minh lại cấu trúc dữ liệu của mình.

bạn có thể tạo một trình kích hoạt để đánh dấu một cờ trong bảng A cho dù có mục nhập tương ứng trong bảng hay không. tất nhiên là dự phòng dữ liệu id này, nhưng đôi khi giá trị của nó. chỉ cần nghĩ về nó như bộ nhớ đệm.

một suy nghĩ cuối cùng:bạn có thể thử SELECT id FROM A WHERE id NOT IN (SELECT id FROM B) nó có thể nhanh hơn một chút vì không cần nối thực tế, tuy nhiên nó cũng có thể chậm hơn vì tra cứu trong tập hợp sẽ là quét toàn bộ. Tôi thực sự không chắc điều này sẽ được xử lý như thế nào nhưng có thể đáng để thử.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm thế nào để kiểm tra xem một hàng có tồn tại trong MySQL hay không? (tức là kiểm tra xem email có tồn tại trong MySQL hay không)

  2. Giá trị KHÔNG ĐẦY ĐỦ trong bộ mã

  3. MySQL Chèn lệnh so với Cú pháp truy vấn T-SQL với các ví dụ

  4. tạo mảng từ php truy vấn mysql

  5. Làm thế nào để chuyển đổi mssql script sang mysql