Wie erkläre ich eine Abfrage mit Parametern in MySQL?

8

Ich habe eine Abfrage

%Vor%

Kann ich einen EXPLAIN-Plan von MySQL bekommen, ohne einen Wert für den Parameter einzugeben?

    
Michael Barker 16.06.2010, 16:56
quelle

3 Antworten

7

Solange Sie nur ein equals tun (und nicht ein like, das Kurzschlüsse beeinflussen kann), ersetzen Sie es einfach durch einen Wert:

%Vor%

Da die Abfrage nicht tatsächlich ausgeführt wird, sollten die Ergebnisse nicht vom tatsächlichen abweichen. Es gibt einige Fälle, in denen das nicht stimmt (ich erwähnte bereits LIKE). Hier ist ein Beispiel für die verschiedenen Fälle von LIKE :

%Vor%
  1. Param 1 == Foo - Kann einen Index-Scan verwenden, wenn ein Index existiert.
  2. Param 1 == %Foo - Erfordert einen vollständigen Tabellenscan, selbst 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 sich verbinden und die Where-Klausel zu einer unmöglichen Kombination führt (und daher einen Kurzschluss verursacht). Zum Beispiel:

%Vor%

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

Es gibt andere, aber das sind alles, woran ich gerade denken kann ...

    
ircmaxell 16.06.2010, 17:05
quelle
0

Der EXPLAIN-Plan kann je nach dem was du eingibst unterschiedlich sein. Ich denke, dass Pläne ohne echte Parameter nichts bedeuten.

    
bwawok 16.06.2010 16:59
quelle
0

Ich glaube nicht, dass es möglich ist. WHERE some_column ='value' , WHERE some_column = other_column und WHERE some_column = (SELECT .. FROM a JOIN b JOIN c ... WHERE ... ORDER BY ... LIMIT 1 ) geben verschiedene Ausführungspläne zurück.

    
a1ex07 16.06.2010 17:03
quelle

Tags und Links