Was bedeutet es, wenn ich sage, dass die Prepared-Anweisung vorkompiliert ist?

8

Ich verwende MySQL in Java . Ich habe kein gutes Verständnis von PreparedStatement .
Ich weiß, es ist besser, PreparedStatement als Statement zu verwenden. Der Grund dafür ist, dass es kompiliert ist.

Was meinen wir mit kompiliert?

    
unknown 24.05.2014, 13:05
quelle

3 Antworten

12

Wenn Sie eine vorbereitete Anweisung verwenden (d. h. vorkompilierte Anweisung), kompiliert sie sie, sobald sie diese Anweisung erhält, und speichert sie, so dass sie die letzte kompilierte Anweisung für den nachfolgenden Aufruf derselben Anweisung verwenden kann. So wird es für aufeinanderfolgende Aufrufe vorkompiliert.

Im Allgemeinen verwenden Sie eine vorbereitete Anweisung mit Bindevariablen, wobei Sie die Variablen zur Laufzeit angeben. Was nun für die sukzessive Ausführung von vorbereiteten Anweisungen passiert, können Sie die Variablen angeben, die sich von vorherigen Aufrufen unterscheiden. Aus DB-Sicht muss es die Anweisung nicht jedes Mal kompilieren, wird nur die Bindevariablen zur Zeit des Rum einfügen. So wird schneller.

Weitere Vorteile vorbereiteter Aussagen sind: -

1) Schutz gegen SQL-Injektion Angriff

2) Schneller für aufeinanderfolgende Aufrufe derselben Anweisungen

Wie es funktioniert: -

  1. Die Vorkompilierung wird von der Datenbank durchgeführt. Einige einfachere Datenbanken kompilieren keine Anweisungen. Andere könnten es beim Aufruf von prepareStatement vorkompilieren, andere wiederum tun dies, wenn execute zum ersten Mal für die Anweisung aufgerufen wird, wobei die Werte der Parameter beim Kompilieren (Erstellen eines Plans für) der Anweisung berücksichtigt werden.

  2. Datenbanken, die Precompile-Anweisungen ausführen, speichern sie normalerweise zwischen, sodass ps1 höchstwahrscheinlich nicht erneut kompiliert wird. Einige JDBC-Treiber (z. B. Oracle) speichern selbst vorbereitete Anweisungen zwischen, sodass sie sie beim Aufruf von ps.close () nicht wirklich geschlossen haben.

  3. Datenbanken speichern im Allgemeinen Anweisungen, bis sie aus dem Cache gelöscht werden.

Weitere Informationen finden Sie in diesem Wiki -Link

    
M Sach 24.05.2014, 13:19
quelle
5

Auf einer höheren Ebene gibt es zwei Schritte beim Ausführen einer SQL-Abfrage. Zuerst wird die Abfrage von einem Textformat zu einer internen Darstellung der Verarbeitung kompiliert, die ausgeführt werden muss. Die zweite ist, dass diese Verarbeitung dann erfolgt.

Was "vorkompiliert" bedeutet, ist, dass der erste Schritt abgeschlossen wurde, so dass es nicht erneut durchgeführt werden muss. Die Kompilierungsphase kann einige Anstrengungen erfordern, insbesondere um die besten Optimierungen für den Ausführungspfad zu finden (welche Indizes zu verwenden sind, welche Join-Methoden usw.). Bei einfachen Abfragen kann dies zusätzlichen Aufwand verursachen. Bei komplexeren Abfragen ist der Aufwand in der Regel viel geringer als der Aufwand, um die Abfragen tatsächlich auszuführen.

Als Beispiel dafür, wie sich dies auswirken kann. Betrachten Sie eine Tabelle ohne Indizes. Sie können eine kompilierte Abfrage erstellen, die einen vollständigen Tabellenscan durchführt. Wenn Sie später einen Index hinzufügen, kann die kompilierte Abfrage den Index nicht verwenden, weil er ihn zur Kompilierzeit nicht kannte.

In der MySQL-Dokumentation wird die Kompilierungsphase meist als Optimierungsphase beschrieben.

    
Gordon Linoff 24.05.2014 13:08
quelle
3

Es ist bereits in Code übersetzt, den der Datenbankserver versteht. Für die Variablen, die Sie einfügen, bleiben nur Platzhalter übrig.

Zum Beispiel muss ein Java-Programm auch vom Quellcode zum Bytecode kompiliert werden, wobei der Quellcode für den Menschen lesbar ist und der Bytecode die Darstellung für den Quellcode ist, der auch von der Maschine verstanden wird

    
wastl 24.05.2014 13:08
quelle

Tags und Links