Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Perbedaan kinerja antara sama (=) dan IN dengan satu nilai literal

Tidak ada perbedaan antara kedua pernyataan tersebut, dan pengoptimal akan mengubah IN ke = ketika IN hanya memiliki satu elemen di dalamnya.

Meskipun ketika Anda memiliki pertanyaan seperti ini, jalankan saja kedua pernyataan tersebut, jalankan rencana eksekusinya dan lihat perbedaannya. Di sini - Anda tidak akan menemukannya.

Setelah pencarian besar-besaran secara online, saya menemukan dokumen pada SQL untuk mendukung ini (saya berasumsi ini berlaku untuk semua DBMS):

Berikut adalah rencana eksekusi kedua kueri di Oracle (sebagian besar DBMS akan memprosesnya dengan cara yang sama):

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

Dan untuk 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  |
-----------------------------------------------------

Seperti yang Anda lihat, keduanya identik. Ini ada di kolom yang diindeks. Hal yang sama berlaku untuk kolom yang tidak diindeks (hanya pemindaian tabel penuh).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PDO Beberapa kueri:transaksi komit dan kembalikan

  2. Bagaimana menentukan mana yang lebih efektif:DISTINCT atau WHERE EXIST?

  3. Pilih dari beberapa tabel dengan pembuat kueri lancar laravel

  4. Cara Membuat Penggunaan Fungsi Komentar Terbaik di MySQL

  5. Apakah ada terowongan HTTP MySQL PHP universal yang bagus?