Tanto IN
y OR
hará una consulta para b = 0
seguido por uno para b = 3
, y luego hacer una combinación de mezcla de los dos conjuntos de resultados, y finalmente filtrar los duplicados.
Con IN
, los duplicados no tiene mucho sentido, porque b
no pueden ser ambos 0
y 3
, pero el hecho es que IN
se convertirá en b = 0 OR b = 3
, y con OR
, duplicados hacer tiene sentido, porque podría tener b = 0 OR a = 3
, y si uniera los dos conjuntos de resultados por separado, podría terminar con duplicados para cada registro que coincidiera con ambos criterios.
Por lo tanto, siempre se realizará un filtrado duplicado, independientemente de si está usando IN
o OR
. Sin embargo, si usted sabe de antemano que no tendrá ningún duplicados - que suele ser el caso cuando se está utilizando IN
- entonces usted puede ganar un poco de rendimiento mediante el uso UNION ALL
que no filtrar los duplicados:
select distinct(a)
from mytable
where
b = 0
UNION ALL
select distinct(a)
from mytable
where
b = 3
¿No lo intentó usted mismo? –