Tant que vous ne faites qu'un égal (et non un semblable, qui peut avoir des effets de court-circuit), remplacez-le simplement par une valeur :
EXPLAIN SELECT foo FROM bar WHERE some_column = 'foo';
Puisqu'il n'exécute pas réellement la requête, les résultats ne doivent pas différer de la réalité. Il y a des cas où ce n'est pas vrai (j'ai déjà mentionné LIKE). Voici un exemple des différents cas de LIKE
:
SELECT * FROM a WHERE a.foo LIKE ?
- Param 1 ==
Foo
- Peut utiliser une analyse d'index si un index existe. - Param 1 ==
%Foo
- Nécessite une analyse complète de la table, même si un index existe - Param 1 ==
Foo%
- Peut utiliser une analyse d'index, en fonction de la cardinalité de l'index et d'autres facteurs
Si vous vous joignez, et que la clause where cède à une combinaison impossible (et donc il y aura un court-circuit). Par exemple :
SELECT * FROM a JOIN b ON a.id = b.id WHERE a.id = ? AND b.id = ?
Si les premier et deuxième paramètres sont identiques, il a un plan d'exécution, et s'ils sont différents, il court-circuitera (et renverra 0 lignes sans toucher aucune donnée)...
Il y en a d'autres, mais c'est tout ce qui me vient à l'esprit en ce moment...