Funktionsaufrufoptimierung MySQL-Funktionen werden intern als deterministisch oder nichtdeterministisch gekennzeichnet. Wenn eine Funktion mit festen Werten für ihre Argumente bei verschiedenen Aufrufen unterschiedliche Ergebnisse zurückgeben kann, ist sie undefiniert. Beispiele für nichtdeterministische Funktionen: Wenn eine Funktion als nicht deterministisch gekennzeichnet ist, werden Verweise auf die Funktion in einer MySQL bestimmt außerdem anhand des Typs seiner Argumente (ob es sich bei den Argumenten um Tabellenspalten oder konstante Werte handelt), wann eine Funktion ausgewertet werden soll. Immer wenn sich der Wert einer Tabellenspalte ändert, muss die deterministische Funktion ausgewertet werden, die die Tabellenspalte als Argument verwendet. Nicht-deterministische Funktionen können die Abfrageleistung beeinträchtigen. Beispielsweise könnten einige Optimierungen nicht verfügbar sein oder es könnten mehr Sperren erforderlich sein. Die folgende Diskussion verwendet Angenommen, eine Tabelle t hat die folgende Definition: Tabelle erstellen t (ID INT nicht NULL Primärschlüssel, Col_a VARCHAR (100)); Betrachten Sie die folgenden beiden Abfragen: Wählen Sie * aus t, wobei id = POW (1,2); Wählen Sie * aus t, wobei id = FLOOR (1 + RAND () * 49); Aufgrund des Gleichheitsvergleichs mit dem Primärschlüssel scheinen beide Abfragen die Primärschlüsselsuche zu verwenden, dies gilt jedoch nur für die erste Abfrage:
Die Auswirkungen des Nichtdeterminismus sind nicht auf UPDATE t SET col_a = some_expr WHERE id = FLOOR(1 + RAND() * 49); Vermutlich besteht die Absicht darin, höchstens eine Zeile zu aktualisieren, bei der der Primärschlüssel mit dem Ausdruck übereinstimmt. Es können jedoch null, eine oder mehrere Zeilen aktualisiert werden, abhängig vom Wert der Das gerade beschriebene Verhalten hat Auswirkungen auf Leistung und Replikation:
Die Schwierigkeit ergibt sich aus der Tatsache, dass
SET @keyval = FLOOR(1 + RAND() * 49); UPDATE t SET col_a = some_expr WHERE id = @keyval;
Setzen Sie optimizer_switch = "derived_merge=off"; UPDATE t, (SELECT @keyval := FLOOR(1 + RAND() * 49)) AS dt SET col_a = irgendein_Ausdruck WHERE id = @keyval; Wie bereits erwähnt, können nichtdeterministische Ausdrücke in der SELECT * FROM t WHERE Teilschlüssel=5 AND einige_Spalten=RAND(); Wenn der Optimierer Oben finden Sie eine ausführliche Erläuterung der MySQL-Funktionsaufrufoptimierung. Weitere Informationen zur MySQL-Funktionsaufrufoptimierung finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM! Das könnte Sie auch interessieren:
|
<<: So stellen Sie sicher, dass auf jeder Seite des WeChat Mini-Programms eine Anmeldung erfolgt
>>: Definition und Funktion des zoom:1-Attributs in CSS
Freunde, die in der Entwicklung tätig sind, insbe...
Die Verwaltung des Speicherplatzes ist für System...
Sysbench ist ein hervorragendes Benchmark-Tool, d...
OOM steht für „Out Of Memory“, was so viel bedeut...
Code kopieren Der Code lautet wie folgt: <!-- ...
In diesem Artikel wird der spezifische Code von j...
Inhaltsverzeichnis Grundlegende Verwendung von Pr...
Als ich heute die Anmeldeseite geschrieben habe, ...
Dieser Artikel stellt häufige Probleme von Xshell...
Schauen wir uns den Befehl zum Neustarten der Doc...
<textarea></textarea> wird verwendet,...
Inhaltsverzeichnis 1. Titel 2. Code 3. Ergebnisse...
Dieser Artikel stellt vor Online-Vorschau und Dow...
Inhaltsverzeichnis 1. Passen Sie das Netzwerk an,...
Aus beruflichen Gründen ist es oft nicht möglich,...