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
1. Flex-Grow-, Flex-Shrink- und Flex-Basis-Eigens...
[LeetCode] 178.Ranglistenergebnisse Schreiben Sie...
Vorwort: Bei der täglichen Verwendung der Datenba...
Vorgestern stieß ich in der Produktionsumgebung a...
Redux ist ein einfacher Statusmanager. Wir werden...
Inhaltsverzeichnis 1. Bilder 1. Was ist ein Spieg...
HTML5 und jQuery implementieren die Vorschau loka...
Vorwort Ich glaube, dass viele Studenten bereits ...
MySQL ist eine relativ einfach zu verwendende rel...
Ich bin bei der Entwicklung eines Projekts schon ...
Dieser Artikel basiert auf dem Free Code Camp Bas...
Dies ist eine Interviewfrage, die die Verwendung ...
Schauen wir uns die detaillierte Methode zum Erst...
1. getElementById von IE8 unterstützt nur IDs, nic...
Versuchen Sie die Installation über Pip in einer ...