Der er ingen forskel mellem disse to udsagn, og optimeringsværktøjet vil transformere IN
til =
når IN
har kun ét element i sig.
Men når du har et spørgsmål som dette, skal du bare køre begge erklæringer, køre deres udførelsesplan og se forskellene. Her - du finder ingen.
Efter en stor søgning på nettet fandt jeg et dokument på SQL for at understøtte dette (jeg antager, at det gælder for alle DBMS):
Her er udførelsesplanen for begge forespørgsler i Oracle (de fleste DBMS vil behandle dette på samme måde):
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 |
-----------------------------------------------------
Og for 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 |
-----------------------------------------------------
Som du kan se, er begge identiske. Dette er på en indekseret kolonne. Det samme gælder for en uindekseret kolonne (kun fuld tabelscanning).