sql >> Base de Datos >  >> RDS >> Mysql

¿Cómo explico una consulta con parámetros en MySQL?

Siempre que esté haciendo solo un igual (y no un igual, que puede tener efectos de cortocircuito), simplemente reemplácelo con un valor:

EXPLAIN SELECT foo FROM bar WHERE some_column = 'foo';

Dado que en realidad no está ejecutando la consulta, los resultados no deberían diferir de los reales. Hay algunos casos en los que esto no es cierto (ya mencioné LIKE). Aquí hay un ejemplo de los diferentes casos de LIKE :

SELECT * FROM a WHERE a.foo LIKE ?
  1. Parámetro 1 ==Foo - Puede usar un escaneo de índice si existe un índice.
  2. Parámetro 1 ==%Foo - Requiere un escaneo completo de la tabla, incluso si existe un índice
  3. Parámetro 1 ==Foo% - Puede usar un escaneo de índice, dependiendo de la cardinalidad del índice y otros factores

Si se está uniendo, y la cláusula where da lugar a una combinación imposible (y por lo tanto se producirá un cortocircuito). Por ejemplo:

SELECT * FROM a JOIN b ON a.id = b.id WHERE a.id = ? AND b.id = ?

Si el primer y el segundo parámetro son iguales, tiene un plan de ejecución, y si son diferentes, provocará un cortocircuito (y devolverá 0 filas sin acceder a ningún dato)...

Hay otros, pero esos son todo lo que puedo pensar ahora mismo...