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

MYSQL - Sự khác biệt giữa IN và EXIST

TỒN TẠI

EXISTS nghĩa đen là để kiểm tra sự tồn tại của các tiêu chí được chỉ định. Trong SQL tiêu chuẩn hiện tại, nó sẽ cho phép bạn chỉ định nhiều hơn một tiêu chí để so sánh - IE nếu bạn muốn biết khi nào col_a và col_b đều khớp - điều này làm cho nó mạnh hơn một chút so với mệnh đề IN. MySQL IN hỗ trợ các bộ giá trị, nhưng cú pháp không di động, vì vậy EXISTS là lựa chọn tốt hơn cả về tính dễ đọc và tính di động.

Điều khác cần lưu ý với EXISTS là cách nó hoạt động - EXISTS trả về một boolean và sẽ trả về boolean trong trận đấu đầu tiên. Vì vậy, nếu bạn đang xử lý các bản sao / bội số, EXISTS sẽ thực thi nhanh hơn IN hoặc JOIN, tùy thuộc vào dữ liệu và nhu cầu.

VÀO

IN là đường cú pháp cho mệnh đề OR. Mặc dù nó rất phù hợp, nhưng có một số vấn đề khi xử lý nhiều giá trị cho sự so sánh đó (phía bắc 1.000).

KHÔNG

Toán tử NOT chỉ đảo ngược logic.

Truy vấn con so với Tham gia

Câu thần chú "luôn sử dụng phép nối" là thiếu sót, bởi vì JOIN có nguy cơ làm tăng kết quả tập hợp nếu có nhiều hơn một bản ghi con chống lại một bản ghi mẹ. Có, bạn có thể sử dụng DISTINCT hoặc GROUP BY để giải quyết vấn đề này, nhưng rất có thể điều này mang lại lợi ích về hiệu suất khi sử dụng cuộc tranh luận THAM GIA. Biết dữ liệu của bạn và những gì bạn muốn cho một tập kết quả - đây là chìa khóa để viết SQL hoạt động tốt.

Để nhắc lại việc biết khi nào và tại sao cần biết những gì cần sử dụng - LEFT JOIN IS NULL là danh sách loại trừ nhanh nhất trên MySQL nếu các cột được so sánh KHÔNG có giá trị rỗng , nếu không thì KHÔNG TRONG / KHÔNG TỒN TẠI là lựa chọn tốt hơn.

Tham khảo:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. kiểu cấu trúc SQL này (trong cơ sở dữ liệu mysql) có hiệu quả trong mô hình thế giới thực không?

  2. Nhiều WHERE với LIMIT MySQL

  3. PHP / MySQL đang cố gắng lấy TIMESTAMPDIFF để xuất ra một kết quả

  4. MySQL không sử dụng các chỉ mục khi truy vấn qua trường BIT bằng các hàm bitwise

  5. Nhóm theo tháng và năm trong MySQL