sql >> Database >  >> RDS >> Mysql

Prestatieverschillen tussen gelijk (=) en IN met één letterlijke waarde

Er is geen verschil tussen deze twee statements, en de optimizer transformeert de IN naar de = wanneer IN bevat maar één element.

Maar als je een vraag als deze hebt, voer dan gewoon beide verklaringen uit, voer hun uitvoeringsplan uit en bekijk de verschillen. Hier - je zult er geen vinden.

Na een uitgebreide online zoektocht vond ik een document op SQL om dit te ondersteunen (ik neem aan dat dit van toepassing is op alle DBMS):

Hier is het uitvoeringsplan van beide queries in Oracle (de meeste DBMS zullen dit op dezelfde manier verwerken):

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

En voor 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  |
-----------------------------------------------------

Zoals je kunt zien, zijn beide identiek. Dit staat in een geïndexeerde kolom. Hetzelfde geldt voor een niet-geïndexeerde kolom (alleen volledige tabelscan).



  1. PDO vs pg_* functies

  2. Bestanden opslaan in database versus bestandssysteem

  3. SQLite JSON_ARRAY_LENGTH()

  4. MariaDB JSON_LENGTH() uitgelegd