sql >> Database teknologi >  >> RDS >> Mysql

Ydelsesforskelle mellem lige (=) og IN med én bogstavelig værdi

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



  1. Gyldige modifikatorer for SQLite dato/tidsfunktioner

  2. Brug af JShell i Java 9 i NetBeans 9.0, del 4

  3. Hvor er mit ugyldige tegn (ORA-00911)

  4. Få størrelsen på et stort objekt i PostgreSQL-forespørgsel?