J'ai refactoré une section lente d'une application héritée d'une autre société pour utiliser une jointure interne au lieu d'une sous-requête comme:
WHERE id IN (SELECT id FROM ...)
La requête refactorisée s'exécute environ 100 fois plus vite. (~ 50 secondes à ~ 0,3) Je m'attendais à une amélioration, mais est-ce que quelqu'un peut expliquer pourquoi c'était si radical? Les colonnes utilisées dans la clause where ont toutes été indexées. SQL exécute-t-il la requête dans la clause where une fois par ligne ou quelque chose?
Mise à jour - Expliquez les résultats:
La différence se situe dans la deuxième partie de la requête "where id in ()" -
2 DEPENDENT SUBQUERY submission_tags ref st_tag_id st_tag_id 4 const 2966 Using where
vs 1 ligne indexée avec la jointure:
SIMPLE s eq_ref PRIMARY PRIMARY 4 newsladder_production.st.submission_id 1 Using index