Ho refactored una sezione lenta di un'applicazione che abbiamo ereditato da un'altra società per utilizzare un join interno anziché una subquery come:
WHERE id IN (SELECT id FROM ...)
La query refactored viene eseguita circa 100 volte più veloce. (Da ~ 50 secondi a ~ 0,3) Mi aspettavo un miglioramento, ma qualcuno può spiegare perché fosse così drastico? Le colonne utilizzate nella clausola where sono state tutte indicizzate. SQL esegue la query nella clausola where una volta per riga o qualcosa del genere?
Aggiornamento - Spiega i risultati:
La differenza sta nella seconda parte della query "dove id in ()" -
2 DEPENDENT SUBQUERY submission_tags ref st_tag_id st_tag_id 4 const 2966 Using where
vs 1 riga indicizzata con il join:
SIMPLE s eq_ref PRIMARY PRIMARY 4 newsladder_production.st.submission_id 1 Using index