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

Quale è più veloce:sottoquery correlate o join?

Innanzitutto, una sottoquery correlata è davvero un tipo di join. Non esiste una regola d'oro su quale produca 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 esecuzione per prendere questa decisione.

In generale, tendo a evitare le sottoquery correlate per un paio di motivi. Innanzitutto, possono quasi sempre essere scritti senza la correlazione. In secondo luogo, molti motori di query li trasformano in join di loop nidificati (sebbene utilizzando indici) e altre strategie di join potrebbero essere migliori. In questi casi, le sottoquery correlate rendono difficile la parallelizzazione della query. In terzo luogo, le sottoquery correlate si trovano solitamente nelle clausole SELECT o WHERE. Mi piace che tutte le mie tabelle siano nella clausola FROM.

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