Det finns ingen skillnad mellan dessa två påståenden, och optimeraren kommer att omvandla IN
till =
när IN
har bara ett element i sig.
Men när du har en fråga som denna, kör bara båda uttalandena, kör deras genomförandeplan och se skillnaderna. Här - du hittar inga.
Efter en stor sökning på nätet hittade jag ett dokument på SQL för att stödja detta (jag antar att det gäller alla DBMS):
Här är exekveringsplanen för båda frågorna i Oracle (de flesta DBMS kommer att behandla detta på samma sätt):
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 |
-----------------------------------------------------
Och för 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 är båda identiska. Detta är på en indexerad kolumn. Detsamma gäller för en oindexerad kolumn (bara genomsökning av hela tabellen).