Saltar al contenido

¿Qué es más rápido, SELECT DISTINCT o GROUP BY en MySQL?

Solución:

Son esencialmente equivalentes entre sí (de hecho, así es como algunas bases de datos implementan DISTINCT bajo el capó).

Si uno de ellos es más rápido, será DISTINCT. Esto se debe a que, aunque los dos son iguales, un optimizador de consultas tendría que detectar el hecho de que su GROUP BY no se está aprovechando de ningún miembro del grupo, solo de sus llaves. DISTINCT hace esto explícito, por lo que puede salirse con la suya con un optimizador un poco más tonto.

En caso de duda, ¡pruébelo!

Si tiene un índice en profession, estos dos son sinónimos.

Si no lo hace, utilice DISTINCT.

GROUP BY en MySQL ordena los resultados. Incluso puedes hacer:

SELECT u.profession FROM users u GROUP BY u.profession DESC

y ordene sus profesiones DESC pedido.

DISTINCT crea una tabla temporal y la usa para almacenar duplicados. GROUP BY hace lo mismo, pero luego recupera los distintos resultados.

Entonces

SELECT DISTINCT u.profession FROM users u

es más rápido, si no tiene un índice en profession.

Todas las respuestas anteriores son correctas, para el caso de DISTINCT en una sola columna frente a GROUP BY en una sola columna. Cada motor de base de datos tiene su propia implementación y optimizaciones, y si le importa la pequeña diferencia (en la mayoría de los casos), ¡debe probar con un servidor específico Y una versión específica! Como las implementaciones pueden cambiar …

PERO, si selecciona más de una columna en la consulta, ¡DISTINCT es esencialmente diferente! Porque en este caso comparará TODAS las columnas de todas las filas, en lugar de solo una columna.

Entonces, si tienes algo como:

// This will NOT return unique by [id], but unique by (id,name)
SELECT DISTINCT id, name FROM some_query_with_joins

// This will select unique by [id].
SELECT id, name FROM some_query_with_joins GROUP BY id

Es un error común pensar que la palabra clave DISTINCT distingue las filas por la primera columna que especificó, pero DISTINCT es una palabra clave general de esta manera.

Por lo tanto, debe tener cuidado de no tomar las respuestas anteriores como correctas para todos los casos … ¡Puede confundirse y obtener resultados incorrectos mientras todo lo que deseaba era optimizar!

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *