Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie erkläre ich eine Abfrage mit Parametern in MySQL

Solange Sie nur ein Gleichheitszeichen verwenden (und kein Gleichheitszeichen, das Kurzschlusseffekte haben kann), ersetzen Sie es einfach durch einen Wert:

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

Da die Abfrage nicht wirklich ausgeführt wird, sollten sich die Ergebnisse nicht von den tatsächlichen unterscheiden. Es gibt einige Fälle, in denen dies nicht zutrifft (ich habe LIKE bereits erwähnt). Hier ist ein Beispiel für die verschiedenen Fälle von LIKE :

SELECT * FROM a WHERE a.foo LIKE ?
  1. Param 1 ==Foo - Kann einen Index-Scan verwenden, wenn ein Index vorhanden ist.
  2. Param 1 ==%Foo - Erfordert einen vollständigen Tabellenscan, auch wenn ein Index vorhanden ist
  3. Param 1 ==Foo% - Kann einen Index-Scan verwenden, abhängig von der Kardinalität des Index und anderen Faktoren

Wenn Sie beitreten und die where-Klausel einer unmöglichen Kombination nachgibt (und daher einen Kurzschluss verursacht). Zum Beispiel:

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

Wenn der erste und der zweite Parameter gleich sind, hat er einen Ausführungsplan, und wenn sie unterschiedlich sind, wird er kurzgeschlossen (und 0 Zeilen zurückgeben, ohne irgendwelche Daten zu treffen) ...

Es gibt noch andere, aber das sind alles, was mir gerade spontan einfallen...