2009-12-11 30 views

risposta

8

Se si sa che due colonne dal vostro risultato sono sempre direttamente collegate, allora è più lento per fare questo:

SELECT DISTINCT CustomerId, CustomerName FROM (...) 

di questo:

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

perché nel secondo caso deve solo confrontare l'id, ma nel primo caso deve confrontare entrambi i campi. Questo è un trucco specifico per MySQL. Non funzionerà con altri database.

+2

Queste due domande non sono le stesse, vero? Nel secondo si selezionano solo ID distinti, non nomi distinti. – DisgruntledGoat

+0

Questo non funzionerà con nessun altro T-SQL, o non sarà più veloce con nessun altro? –

+1

Beh, il secondo non funziona !!! Qualsiasi colonna non inclusa nella clausola GROUP BY richiede una funzione di aggregazione. –

2
SELECT Code 
FROM YourTable 
GROUP BY Code 

vs

SELECT DISTINCT Code 
FROM YourTable 
+4

come è questa una risposta alla q? Mi sto perdendo qualcosa? – nawfal

0

La regola di base: mettere tutte le colonne dalla clausola SELECT nella clausola GROUP BY

così

SELECT DISTINCT a,b,c FROM D 

diventa

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

Correggimi se sbaglio. Non dovrebbe essere la regola di base, mettere tutte le colonne non aggregate dalla clausola SELECT nella clausola GROUP BY? –

-2

Esempio.

Relazione cliente (ssnum, nome, codice postale, indirizzo) PK (ssnum). ssnum è il numero di previdenza sociale.

SQL:

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

Questa istruzione SQL restituisce record univoci per quei clienti che hanno del codice postale 1234. A alla fine i risultati sono raggruppati in base al nome.

Qui DISTINCT non è necessario. perché stai selezionando ssnum che è già unico perché ssnun è la chiave primaria. due persone non possono avere lo stesso ssnum.

In questo caso, Select ssnum from customer where zipcode=1234 group by name offrirà prestazioni migliori di "... DISTINCT .......".

DISTINCT è un'operazione costosa in un DBMS.

+0

Qual è la differenza nella risposta quando si ha GROUP BY e nessun GROUP BY? Qual è la differenza nella risposta quando si ha DISTINCT e non DISTINCT (è "indistinto"?)? AFAICS, le query darebbero tutti lo stesso set di risultati (dare o fare ordini, che non conta), anche se non necessariamente tutti alla stessa velocità. –

Problemi correlati