Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Różnice w wydajności między równymi (=) i IN z jedną wartością dosłowną

Nie ma różnicy między tymi dwoma instrukcjami, a optymalizator przekształci IN do = kiedy IN zawiera tylko jeden element.

Chociaż, gdy masz takie pytanie, po prostu uruchom oba oświadczenia, uruchom ich plan wykonania i zobacz różnice. Tutaj - nie znajdziesz żadnego.

Po długich poszukiwaniach w Internecie znalazłem dokument na SQL, aby to obsługiwać (zakładam, że dotyczy to wszystkich DBMS):

Oto plan wykonania obu zapytań w Oracle (większość DBMS przetworzy to samo):

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

I dla 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 widać, oba są identyczne. To jest w indeksowanej kolumnie. To samo dotyczy nieindeksowanej kolumny (tylko pełne skanowanie tabeli).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wiele tabel lub wierszy, która z nich jest bardziej wydajna w SQL?

  2. MySQL:Jak skopiować wiersze, ale zmienić kilka pól?

  3. Czy powinienem trzymać się tylko automatycznej kopii zapasowej AWS RDS lub migawek DB?

  4. Jak radzić sobie z błędami dla zduplikowanych wpisów?

  5. PyMySQL nie może połączyć się z MySQL na hoście lokalnym