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

Left JOIN più velocemente o Inner Join più velocemente?

Dipende; eseguili entrambi per scoprirlo; quindi esegui una "spiega selezione" per una spiegazione.

La differenza di prestazioni effettiva può variare da "praticamente inesistente" a "abbastanza significativa" a seconda di quante righe in A con id='12345' non hanno record corrispondenti in B e C.

Aggiorna (basato sui piani di query pubblicati)

Quando usi INNER JOIN, non importa (in termini di risultati, non in termini di prestazioni) con quale tabella iniziare, quindi l'ottimizzatore cerca di scegliere quella che ritiene possa funzionare meglio. Sembra che tu abbia indici su tutte le colonne PK / FK appropriate e non hai un indice su friend_events.userid oppure ci sono troppi record con userid = '13006' e non viene utilizzato; in entrambi i casi, l'ottimizzatore seleziona la tabella con meno righe come "base" - in questo caso è zcms_users .

Quando usi LEFT JOIN lo fa importa (in termini di risultati) con quale tabella iniziare; quindi friend_events viene scelto. Ora perché ci vuole meno tempo in questo modo non ne sono del tutto sicuro; Immagino friend_events.userid condizione aiuta. Se dovessi aggiungere un indice (è davvero varchar, btw? non numerico?) su questo, anche il tuo INNER JOIN potrebbe comportarsi in modo diverso (e diventare più veloce).