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
Kommen wir ohne weitere Umschweife direkt zum Cod...
Spiegel finden Wir können auf der Docker Hub-Webs...
WML (Wireless Markup Language). Es handelt sich u...
Apache Log4j2 meldete eine Sicherheitslücke auf n...
Dieser Artikel richtet sich hauptsächlich an diej...
1. Installieren Sie grundlegende Komponenten Führ...
Inhaltsverzeichnis Was sind Refs 1. Referenzen vo...
Tatsächlich ist dieses Problem bereits aufgetreten...
Vorwort Als ich heute Xianyu durchsuchte, fiel mi...
Bei der Installation von FileZilla Server auf dem...
Inhaltsverzeichnis Unterstützt mehrere Filterarte...
Einführung in Swap Swap (d. h. Swap-Partition) in...
In der tatsächlichen Arbeit werden reguläre Ausdr...
Was ist Inhaltsüberlauf? Wenn tatsächlich viel Te...
Stellungnahme : In diesem Artikel erfahren Sie, w...