Mysql
 sql >> Database >  >> RDS >> Mysql

Usa un'unione o un'unione:cosa è più veloce

L'unione sarà più veloce, poiché passa semplicemente la prima istruzione SELECT, quindi analizza la seconda istruzione SELECT e aggiunge i risultati alla fine della tabella di output.

Il join passerà attraverso ogni riga di entrambe le tabelle, trovando corrispondenze nell'altra tabella, quindi richiedendo molta più elaborazione a causa della ricerca di righe corrispondenti per ogni riga.

MODIFICA

Per Union, intendo Union All poiché sembrava adeguato per ciò che stavi cercando di ottenere. Sebbene un'unione normale sia generalmente più veloce di unisciti.

EDIT 2 (Rispondi al commento di @seebiscuit)

Non sono d'accordo con lui. Tecnicamente parlando, non importa quanto sia buono il tuo join, un "JOIN" è ancora più costoso di una pura concatenazione. Ho pubblicato un post sul blog per dimostrarlo sul mio blog codePERF[dot]net . In pratica servono 2 scopi completamente diversi ed è più importante assicurarsi che l'indicizzazione sia corretta e che utilizzi lo strumento giusto per il lavoro.

Tecnicamente, penso che possa essere riassunto utilizzando i seguenti 2 piani di esecuzione presi dal mio post sul blog:

UNION ALL Piano di esecuzione

JOIN Piano di esecuzione

Risultati pratici

In pratica, la differenza su una ricerca nell'indice cluster è trascurabile: