Refaktoryzowałem powolną sekcję aplikacji, którą odziedziczyliśmy po innej firmie, aby użyć sprzężenia wewnętrznego zamiast podzapytania, takiego jak:
WHERE id IN (SELECT id FROM ...)
Zapytanie refaktoryzowane działa około 100 razy szybciej. (~ 50 sekund do ~ 0,3) Spodziewałem się poprawy, ale czy ktoś może wyjaśnić, dlaczego było to tak drastyczne? Wszystkie kolumny użyte w klauzuli where zostały zindeksowane. Czy SQL wykonuje zapytanie w klauzuli where raz na wiersz czy coś w tym stylu?
Aktualizacja - wyjaśnij wyniki:
Różnica jest w drugiej części zapytania „where id in ()” -
2 DEPENDENT SUBQUERY submission_tags ref st_tag_id st_tag_id 4 const 2966 Using where
vs 1 indeksowany wiersz z łączeniem:
SIMPLE s eq_ref PRIMARY PRIMARY 4 newsladder_production.st.submission_id 1 Using index