Cuando piensas en ordenar solo valores unicos es comun pensar en distinct y Group by ,como opciones de filtrado al igual que distinct podemos hacer filtros de valores unicos con Group by , para los fines practicos cual es el mejor distinct o group by? cual tiene mejor performace? Que deberia tomar en cuenta para hacer mi consulta.
El Lenguaje de Consulta Estructurada (SQL) es un lenguaje gestor para el manejo de la información en las bases de datos relacionales. Este tipo de lenguaje de programación permite comunicarse con la base de datos y realizar operaciones de acceso y manipulación de la información almacenada. Esto puede aplicar para mysql, oracle y sqlserver.
Sintaxis de distinct y group by
Supongamos que tengo una tabla llamada vendedores
y uno de sus campos es categoria
, al hacer las siguientes consultas con distinct o group by el resultado es el mismo:
SELECT DISTINCT categoria FROM vendedores;
SELECT categoria FROM vendedores group by vendedores;
La diferencia que resalta con DISTINCT
muestra unicamente los valores no repetidos del campo seleccionado en la tabla y Group by agrupa los registros de una tabla en una FILA ÚNICA para luego aplicarle una función determinada sin tomar en cuenta si es un valor unico o no.
Cual es mas rapido ?
Tomando en cuenta lo anterior en el group by damos prioridad a la velocidad en la consulta mientras en con el distinct optimizamos la memoria ya que todos los valores mostrados y ordenados son distintos al anteriror ya que el distinct copia todos los valores a una tabla temporal, la ordena y luego va retornando los elementos que son distintos al anterior.
En funcionamiento uno agrupa datos y el otro regresa valores únicos, en el caso de GROUP BY su funcion es aplicar funciones (avg , sum, min, max) y DISTINCT sencillamente limpia duplicado. por los cual al hacer una consulta tomaremos en cuenta cual es el objetivo.
Distinct elimina registros duplicados ?
para los fines de eliminar registros dupicados te puedo recomendar nuestro post con las tecnicas para eliminar registros duplicardos con ejemplos.
Group by performance
para los fines del performance como hemos visto siempres seria mas rapido usar un group by para generar un lista de valores unicos clasificados por un campo los cual podemos comprobar con ejemplos los cuales puedes utilizar en todos cualquier SGBD
Distinct y sus aplicaciones
Para los fines de conocer cuales son todas las aplicaciones que podemos hacer utilizando con dinstinct que mejor que este link que te dejo con ejemplos
En resumen estos comandos no eliminan los registros de las tablas pero si lo que quieres es ordenar valores unicos en una lista distinct es el comando para fines de grandes calculos y clasificacion de valores y campos unicos deberias considerar el uso de groupby.