J'ai une requête
SELECT foo FROM bar WHERE some_column = ?
3 Réponses :
Le plan d'explication peut être différent selon ce que vous avez mis. Je pense que expliquer les plans sans paramètre réel ne signifie rien. P>
Je ne pense pas que ce soit possible.
où certains_column = 'valeur' code>,
où one_column = autre_column code> et
où certains_column = (SELECT .. À partir d'une join B Join ... Où ... Par ... limite 1) code> renvoie différents plans d'exécution. P>
Vrai, mais ils ne seraient pas non plus autorisés dans la requête paraméquie ;-). Tout le paramètre pourrait être remplacé par une valeur scalaire (int, chaîne, null, etc.). Donc, seul le premier de votre exemple serait une substitution appropriée ...
Tant que vous ne faites que des égaux (et non un type, ce qui peut avoir des problèmes de court-circuit), remplacez-le simplement avec une valeur: puisque ce n'est pas réellement exécuté La requête, les résultats ne doivent pas différer de la réalité. Il y a quelques cas où ce n'est pas vrai (j'ai déjà mentionné comme déjà). Voici un exemple des différents cas de Si vous vous joignez, et la clause où la clause donne une combinaison impossible (et donc le court-circuit). Par exemple: p> si les premier et second paramètres sont identiques, il possède un plan d'exécution, et s'ils sont différents, il sera court-circuit (et retournera 0 rangées sans Frapper toutes les données) ... P> Il y en a d'autres, mais ce sont tout ce que je peux penser au sommet de ma tête en ce moment ... p> p> comme code>: p>
foo code> - peut utiliser une analyse d'index si un index existe. Li>
% foo code> - nécessite une numérisation de table complète, même si un index existe li>
foo% code> - peut utiliser une analyse d'index, en fonction de la cardinalité de l'index et des autres facteurs li>
ol>