sql - tag - grupo distinto vs por el cual es mejor
title tags html (1)
Tu experiencia es interesante. No he visto el efecto reductor único para distinct
versus group by
. Quizás haya alguna diferencia sutil en el optimizador entre las dos construcciones.
Un ejemplo "famoso" en Hive es:
select count(distinct id)
from mytbl;
versus
select count(*)
from (select distinct id
from mytbl
) t;
El primero solo usa un reductor y el segundo opera en paralelo. He visto esto en mi experiencia, y está documentado y discutido (por ejemplo, en las diapositivas 26 y 27 de esta presentation ). Entonces, los distinct
pueden definitivamente aprovechar el paralelismo.
Me imagino que a medida que la colmena madura, estos problemas se solucionarán. Sin embargo, es irónico que Postgres tenga un problema de rendimiento similar con COUNT(DISTINCT)
, aunque creo que la razón subyacente es un poco diferente.
Para el caso más simple todos nos referimos a:
select id from mytbl
group by id
y
select distinct id from mytbl
como sabemos, generan el mismo plan de consulta que se ha mencionado repetidamente en algunos elementos como Cual es mejor: Distinct o Group By
En la colmena, sin embargo, el primero solo tiene una tarea de reducción mientras que el segundo tiene muchos.
A partir de los experimentos, descubrí que el GROUP BY es 10 veces más rápido que DISTINCT.
Ellos son diferentes.
Entonces lo que aprendí es:
GROUP-BY no es peor que DISTINTO, y es mejor a veces.
Me gustaría saber:
1 . Si esta conclusión es cierta.
2 . Si es verdad, consideraré DISTINCT como un enfoque para la conveniencia lógica, pero ¿por qué DISTINCT no toma la mejor implementación de GROUP-BY?
3 . Si fuera falso, estaría muy ansioso por saber su uso decente en una situación de big data.
¡¡Muchas gracias!!:)