per il caso più semplice che tutti noi riferiamo a:distinta vs gruppo con cui è meglio
select id from mytbl
group by id
e
select distinct id from mytbl
come sappiamo, che generano lo stesso piano di query che era stato più volte citato in qualche articoli come Which is better: Distinct or Group By
Nell'alveare, tuttavia, il primo ha solo un compito di riduzione mentre il secondo ne ha molti.
Da esperimenti, ho fondato che GROUP BY è 10+ volte più veloce di DISTINCT.
Sono diversi.
Quindi quello che ho imparato è:
GROUP BY-è in ogni caso non è peggio di DISTINCT, ed è meglio a volte.
Vorrei sapere:
. Se questa conclusione è vera.
. Se vero, considererò DISTINCT come un approccio per la convenienza logica, ma perché DISTINCT non prende l'implementazione migliore di GROUP-BY?
. Se falso, sarei molto desideroso di conoscere il suo uso decente in situazioni di big-data.
Grazie mille !! :)
La domanda che hai collegato riguarda specificamente il comportamento di MS SQL Server. Motori diversi hanno approcci diversi, diverse ottimizzazioni, ecc. Non c'è motivo di credere che solo perché 'group by' e' distinct' sono equivalenti su MS SQL (di alcune versioni specifiche) questo vale anche per Hive. Hai usato EXPLAIN per esaminare i piani di esecuzione effettivi? – Luaan
Grazie. Ho seguito il tuo approccio e ho utilizzato i due giorni trascorsi esaminando i piani di query del mio SQL. La cosa interessante è che, per un caso semplice come sopra, i piani di query sono gli stessi (tutti utilizzano group-by) ma diversi quando inserisco molti DISTINCT + UNION rispetto a GROUPBY + UNION. – Chiron
Forse questo ha una buona ragione, o forse è solo una svista (distinto non è abbastanza diffuso come un tempo - era usato per hackerare i DB mal progettati). Potresti postarlo su Hadoop/Hive's issue tracker o qualcosa del genere, ma probabilmente continuerai a rotolarlo. Non è sempre ovvio perché due query simili finiscono per essere eseguite in modo completamente diverso. – Luaan