8
votes

Comment puis-je expliquer une requête avec des paramètres dans mysql

J'ai une requête

SELECT foo FROM bar WHERE some_column = ?


0 commentaires

3 Réponses :


1
votes

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.


0 commentaires

0
votes

Je ne pense pas que ce soit possible. où certains_column = 'valeur' ​​, où one_column = autre_column et où certains_column = (SELECT .. À partir d'une join B Join ... Où ... Par ... limite 1) renvoie différents plans d'exécution.


1 commentaires

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 ...



7
votes

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: xxx

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 comme : xxx

  1. param 1 == foo - peut utiliser une analyse d'index si un index existe.
  2. param 1 == % foo - nécessite une numérisation de table complète, même si un index existe
  3. param 1 == foo% - peut utiliser une analyse d'index, en fonction de la cardinalité de l'index et des autres facteurs

    Si vous vous joignez, et la clause où la clause donne une combinaison impossible (et donc le court-circuit). Par exemple: xxx

    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) ...

    Il y en a d'autres, mais ce sont tout ce que je peux penser au sommet de ma tête en ce moment ...


0 commentaires