Dopóki robisz tylko równe (a nie podobne, co może mieć wpływ na zwarcie), po prostu zastąp to wartością:
EXPLAIN SELECT foo FROM bar WHERE some_column = 'foo';
Ponieważ w rzeczywistości nie wykonuje zapytania, wyniki nie powinny różnić się od rzeczywistych. Są przypadki, w których to nieprawda (wspomniałem już LIKE). Oto przykład różnych przypadków LIKE
:
SELECT * FROM a WHERE a.foo LIKE ?
- Parametr 1 ==
Foo
- Może użyć skanowania indeksu, jeśli indeks istnieje. - Parametr 1 ==
%Foo
- Wymaga pełnego skanowania tabeli, nawet jeśli indeks istnieje - Parametr 1 ==
Foo%
- Może użyć skanowania indeksu, w zależności od kardynalności indeksu i innych czynników
Jeśli dołączasz, a klauzula WHERE ulegnie niemożliwej kombinacji (a więc spowoduje zwarcie). Na przykład:
SELECT * FROM a JOIN b ON a.id = b.id WHERE a.id = ? AND b.id = ?
Jeśli pierwszy i drugi parametr są takie same, ma jeden plan wykonania, a jeśli są różne, spowoduje zwarcie (i zwróci 0 wierszy bez trafienia w żadne dane)...
Są inne, ale to wszystko, o czym mogę teraz myśleć z czubka głowy...