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

Sự khác biệt về hiệu suất giữa bằng (=) và IN bằng một giá trị chữ

Không có sự khác biệt giữa hai câu lệnh đó và trình tối ưu hóa sẽ biến đổi IN tới = khi IN chỉ có một phần tử trong đó.

Mặc dù khi bạn có câu hỏi như thế này, chỉ cần chạy cả hai câu lệnh, chạy kế hoạch thực thi của chúng và xem sự khác biệt. Tại đây - bạn sẽ không tìm thấy bất kỳ.

Sau một cuộc tìm kiếm lớn trên mạng, tôi đã tìm thấy một tài liệu trên SQL để hỗ trợ điều này (tôi cho rằng nó áp dụng cho tất cả DBMS):

Đây là kế hoạch thực thi của cả hai truy vấn trong Oracle (hầu hết DBMS sẽ xử lý điều này giống nhau):

EXPLAIN PLAN FOR
select * from dim_employees t
where t.identity_number = '123456789'

Plan hash value: 2312174735
-----------------------------------------------------
| Id  | Operation                   | Name          |
-----------------------------------------------------
|   0 | SELECT STATEMENT            |               |
|   1 |  TABLE ACCESS BY INDEX ROWID| DIM_EMPLOYEES |
|   2 |   INDEX UNIQUE SCAN         | SYS_C0029838  |
-----------------------------------------------------

Và đối với IN() :

EXPLAIN PLAN FOR
select * from dim_employees t
where t.identity_number in('123456789');

Plan hash value: 2312174735
-----------------------------------------------------
| Id  | Operation                   | Name          |
-----------------------------------------------------
|   0 | SELECT STATEMENT            |               |
|   1 |  TABLE ACCESS BY INDEX ROWID| DIM_EMPLOYEES |
|   2 |   INDEX UNIQUE SCAN         | SYS_C0029838  |
-----------------------------------------------------

Như bạn có thể thấy, cả hai đều giống hệt nhau. Đây là một cột được lập chỉ mục. Tương tự với cột không được lập chỉ mục (chỉ quét toàn bộ bảng).



  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ới hạn số lượng hàng để tham gia, trong mysql

  2. PHPmailer - Gửi nhiều e-mail

  3. MySQL thêm ngày vào một ngày

  4. Làm thế nào để lấy giá trị từ Javascript Prompt Box và truyền nó vào biến PHP để có thể lưu trong SQL?

  5. MySQL Server của tôi là phiên bản nào?