2009-12-11 10 views

Respuesta

8

Si sabe que dos columnas de su resultado siempre están directamente relacionados a continuación, es más lento para hacer esto:

SELECT DISTINCT CustomerId, CustomerName FROM (...) 

que esto:

SELECT CustomerId, CustomerName FROM (...) GROUP BY CustomerId 

porque en el segundo caso solo tiene que comparar el ID, pero en el primer caso tiene que comparar ambos campos. Este es un truco específico de MySQL. No funcionará con otras bases de datos.

+2

Esas dos consultas no son lo mismo, ¿verdad? En el segundo, solo está seleccionando identificadores distintos, no nombres distintos también. – DisgruntledGoat

+0

¿Esto no funcionará con ningún otro T-SQL, o no será más rápido con otro? –

+1

¡Bueno, el segundo no funciona! Cualquier columna no incluida en la cláusula GROUP BY requiere una función de agregación. –

2
SELECT Code 
FROM YourTable 
GROUP BY Code 

vs

SELECT DISTINCT Code 
FROM YourTable 
+4

¿cómo es esta una respuesta a la q? ¿Me estoy perdiendo de algo? – nawfal

0

La regla básica: poner todas las columnas de la cláusula SELECT en la cláusula GROUP BY

por lo

SELECT DISTINCT a,b,c FROM D 

convierte

SELECT a,b,c FROM D GROUP BY a,b,c 
+1

Corrígeme si me equivoco. ¿No debería ser la regla básica, colocar todas las columnas no agregadas de la cláusula SELECT en la cláusula GROUP BY? –

-2

Ejemplo.

Cliente de la relación (ssnum, nombre, código postal, dirección) PK (ssnum). ssnum es el número de seguro social.

SQL:

Select DISTINCT ssnum from customer where zipcode=1234 group by name 

Esta instrucción SQL devuelve registros únicos para los del cliente que tienen código postal 1234. En los resultados finales se agrupan por su nombre.

Aquí DISTINCT no es necesario. porque está seleccionando ssnum, que ya es único porque ssnun es la clave principal. dos personas no pueden tener el mismo ssnum.

En este caso Select ssnum from customer where zipcode=1234 group by name dará un mejor rendimiento que "... DISTINCT .......".

DISTINCT es una operación costosa en un DBMS.

+0

¿Cuál es la diferencia en la respuesta cuando tiene GROUP BY y no GROUP BY? ¿Cuál es la diferencia en la respuesta cuando tiene DISTINCT y no DISTINCT (es eso 'indistinto'?)? AFAICS, todas las consultas arrojarían el mismo conjunto de resultados (orden de dar o tomar, que no cuenta), aunque no necesariamente todos a la misma velocidad. –

Cuestiones relacionadas