sql >> Databasteknik >  >> RDS >> Mysql

Prestandaskillnader mellan lika (=) och IN med ett bokstavligt värde

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



  1. Tillkännager repmgr 2.0RC2

  2. SQL Server - hitta den n:e förekomsten i en sträng

  3. Sqlite Android Raw Query INSERT INTO Fungerar inte

  4. TO_DSINTERVAL() Funktion i Oracle