2012-09-11 14 views

risposta

16

In primo luogo, una sottoquery correlata è in realtà un tipo di join. Non esiste una regola d'oro su chi produce il miglior piano di esecuzione. Se sei interessato alle prestazioni, devi provare le diverse forme per vedere cosa funziona meglio. O, almeno, guarda i piani di exeuction per prendere quella decisione.

In generale, tendo ad evitare subquery correlate per un paio di motivi. Primo, possono quasi sempre essere scritti senza la correlazione. In secondo luogo, molti motori di query li trasformano in join di loop nidificati (anche se utilizzano indici) e altre strategie di join potrebbero essere migliori. In questi casi, le subquery correlate rendono difficile il parallelismo della query. Terzo, le subquery correlate sono solitamente nelle clausole SELECT o WHERE. Mi piace che tutti i miei tavoli siano nella clausola FROM.

In MySQL, tuttavia, le sottoquery correlate sono spesso la maggior parte del modo efficiente per eseguire una query. Ciò è particolarmente vero quando si utilizza una sottoquery in una clausola IN. Quindi, non esiste una regola d'oro.

Problemi correlati