Mezi těmito dvěma příkazy není žádný rozdíl a optimalizátor transformuje IN
do =
když IN
má v sobě pouze jeden prvek.
I když když máte takovou otázku, stačí spustit oba příkazy, spustit jejich plán provádění a vidět rozdíly. Tady - žádné nenajdete.
Po velkém hledání online jsem našel dokument na SQL, aby to podporovalo (předpokládám, že to platí pro všechny DBMS):
Zde je plán provádění obou dotazů v Oracle (většina DBMS to zpracuje stejně):
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 |
-----------------------------------------------------
A pro 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 |
-----------------------------------------------------
Jak vidíte, oba jsou totožné. Toto je v indexovaném sloupci. Totéž platí pro neindexovaný sloupec (jen úplné prohledání tabulky).