Finché stai facendo solo un uguale (e non un mi piace, che può avere effetti di cortocircuito), sostituiscilo semplicemente con un valore:
EXPLAIN SELECT foo FROM bar WHERE some_column = 'foo';
Poiché non sta effettivamente eseguendo la query, i risultati non dovrebbero differire da quelli effettivi. Ci sono alcuni casi in cui questo non è vero (ho già menzionato LIKE). Ecco un esempio dei diversi casi di LIKE
:
SELECT * FROM a WHERE a.foo LIKE ?
- Param 1 ==
Foo
- Può utilizzare una scansione dell'indice se esiste un indice. - Param 1 ==
%Foo
- Richiede una scansione completa della tabella, anche se esiste un indice - Param 1 ==
Foo%
- Può utilizzare una scansione dell'indice, a seconda della cardinalità dell'indice e di altri fattori
Se ti stai unendo, e la clausola where cede a una combinazione impossibile (e quindi andrà in cortocircuito). Ad esempio:
SELECT * FROM a JOIN b ON a.id = b.id WHERE a.id = ? AND b.id = ?
Se il primo e il secondo parametro sono gli stessi, ha un piano di esecuzione e, se sono diversi, andrà in cortocircuito (e restituirà 0 righe senza colpire alcun dato)...
Ce ne sono altri, ma quelli sono tutto ciò a cui riesco a pensare in questo momento...