sql >> Databáze >  >> RDS >> Mysql

Rozdíly ve výkonu mezi rovným (=) a IN s jednou doslovnou hodnotou

Mezi těmito dvěma příkazy není žádný rozdíl a optimalizátor transformuje IN do = když IN má v sobě pouze jeden prvek.

I když když máte takovou otázku, stačí spustit oba příkazy, spustit jejich plán provádění a vidět rozdíly. Tady - žádné nenajdete.

Po velkém hledání online jsem našel dokument na SQL, aby to podporovalo (předpokládám, že to platí pro všechny DBMS):

Zde je plán provádění obou dotazů v Oracle (většina DBMS to zpracuje stejně):

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

A pro 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 vidíte, oba jsou totožné. Toto je v indexovaném sloupci. Totéž platí pro neindexovaný sloupec (jen úplné prohledání tabulky).



  1. Jak změnit typ úložiště na MySQL?

  2. Jak vyřešit chybějící výraz ORA-00936

  3. Události čekání serveru SQL -1

  4. Problém s MySql a vkládáním posledního ID zůstává