2013-05-08 3 views
5

C'è un modo per capire in anticipo (non per tentativi ed errori) se una query specifica deve utilizzare GROUP BY o GROUP EACH BY? Al momento abbiamo visto che dopo una cardinalità di ~ 60-70% ci viene chiesto di usare Group EACH di. È difficile prevedere come generiamo l'SQL.identifica gruppo per gruppo vs ciascuno in anticipo

risposta

4

L'utilizzo di "EACH" non dipende dalla query, ma dai dati. C'è un piccolo numero di valori unici per l'espressione di gruppo? Utilizza GROUP BY. C'è molto? Utilizzare GROUP CIASCUNO.

La strategia migliore consiste nell'utilizzare GROUP BY finché non si verifica un "errore di superamento dei limiti".

Per approfondire il "perché?", È possibile consultare il documento Dremel che ha dato il via a tutto. Fondamentalmente GROUP BY viene eseguito nei mixer, mentre GROUP EACH BY viene spinto ai frammenti.

Per ulteriori approfondimenti, controllare le risposte di jcondit a Resources Exceeded during query execution.

+0

grazie, ma non possiamo permettere alle query degli utenti solo di "ottenere l'errore" e quindi eseguirlo di nuovo :-). – user1516770

+0

Sono d'accordo! Puoi dirmi di più sul caso d'uso? –