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
Vorwort In diesem Artikel wird erklärt, wie Sie i...
Wenn bei der tatsächlichen Projektentwicklung die...
Hinweis: Alle Bilder in diesem Artikel stammen au...
1. Problem Das mit Eclipse unter Windows entwicke...
Im Folgenden habe ich einige grundlegende SQL-Ken...
Inhaltsverzeichnis 2. Stapelanalyse mit pt-pmap 3...
Zunächst einmal: Was ist 404 und Soft 404? 404: Ei...
Standardmäßig generiert die MyISAM-Tabelle drei D...
ModSecurity ist ein leistungsstarkes Paketfiltert...
Aktivieren Sie den Remotezugriff auf MySQL MySQL-...
Da der Datenbindungsmechanismus von Vue und ander...
1. Tabellenanweisung erstellen: CREATE TABLE `Mit...
Der Inhalt der Web-Frontend-Entwicklung umfasst h...
Crontab installieren yum install crontabs CentOS ...
Dieser Artikel zeichnet das Installationstutorial...