Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment expliquer une requête avec des paramètres dans MySQL

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 ?
  1. Param 1 ==Foo - Peut utiliser une analyse d'index si un index existe.
  2. Param 1 ==%Foo - Nécessite une analyse complète de la table, 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 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...