Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Diferenças de desempenho entre igual (=) e IN com um valor literal


Não há diferença entre essas duas instruções, e o otimizador transformará o IN para o = quando IN tem apenas um elemento.

No entanto, quando você tiver uma pergunta como essa, apenas execute as duas instruções, execute o plano de execução e veja as diferenças. Aqui - você não encontrará nenhum.

Após uma grande pesquisa on-line, encontrei um documento no SQL para suportar isso (suponho que se aplique a todos os DBMS):

Aqui está o plano de execução de ambas as consultas no Oracle (a maioria dos DBMS processará isso da mesma forma):
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  |
-----------------------------------------------------

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

Como você pode ver, ambos são idênticos. Isso está em uma coluna indexada. O mesmo vale para uma coluna não indexada (apenas varredura completa da tabela).