sql >> Base de Datos >  >> RDS >> Mysql

Diferencias de rendimiento entre iguales (=) e IN con un valor literal

No hay diferencia entre esas dos declaraciones, y el optimizador transformará el IN al = cuando IN tiene solo un elemento.

Aunque cuando tenga una pregunta como esta, simplemente ejecute ambas declaraciones, ejecute su plan de ejecución y vea las diferencias. Aquí, no encontrarás ninguno.

Después de una gran búsqueda en línea, encontré un documento en SQL para admitir esto (supongo que se aplica a todos los DBMS):

Este es el plan de ejecución de ambas consultas en Oracle (la mayoría de los DBMS procesarán esto de la misma manera):

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

Y 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 puedes ver, ambos son idénticos. Esto está en una columna indexada. Lo mismo ocurre con una columna no indexada (solo exploración completa de la tabla).