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