MySQL InnoDB MRR-Optimierungshandbuch

MySQL InnoDB MRR-Optimierungshandbuch

Vorwort

MRR ist die Abkürzung für Multi-Range Read und zielt darauf ab, den wahlfreien Festplattenzugriff zu reduzieren und den wahlfreien Zugriff in einen eher sequentiellen Zugriff umzuwandeln. Gilt für Abfragen vom Typ range/ref/eq_ref.

Umsetzungsprinzip:

1. Suchen Sie nach der Suche im Sekundärindex die erforderlichen Daten basierend auf dem erhaltenen Primärschlüssel im gruppierten Index.

2. Die Reihenfolge der durch die Sekundärindexsuche erhaltenen Primärschlüssel ist ungewiss, da die Reihenfolge des Sekundärindex nicht unbedingt mit der Reihenfolge des Clusterindex übereinstimmt.

3. Wenn kein MRR vorhanden ist, werden Datenseiten während der Suche im Clustered Index möglicherweise in der falschen Reihenfolge gelesen, was für mechanische Festplatten äußerst ungünstig ist.

4. MRR-Optimierungsmethoden:

  • Legen Sie den gefundenen sekundären Indexschlüsselwert in einen Cache.
  • Sortieren Sie die Schlüsselwerte im Cache nach Primärschlüssel;
  • Der Zugriff auf die eigentliche Datendatei erfolgt basierend auf dem sortierten, declusterten Primärschlüsselindex.

5. Wenn der Optimierer MRR verwendet, wird in der Spalte „Extra“ des Ausführungsplans „MRR verwenden“ angezeigt.

6. Wenn die Reihenfolge des in der Abfrage verwendeten Sekundärindex mit der Reihenfolge des Ergebnissatzes übereinstimmt, muss der Ergebnissatz nach Verwendung von MRR sortiert werden.

Durch die Verwendung von MRR können Sie außerdem die Anzahl der Seitenersetzungen im Pufferpool und die Stapelverarbeitung von Schlüsselwertabfragen reduzieren.

Mit dem Befehl select @@optimizer_switch; können Sie prüfen, ob MRR aktiviert ist:

index_merge=ein,index_merge_union=ein,index_merge_sort_union=ein,index_merge_intersection=ein,engine_condition_pushdown=ein,index_condition_pushdown=ein,mrr=aus,mrr_cost_based=ein,block_nested_loop=ein,batched_key_access=aus,materialization=ein,semijoin=ein,loosescan=ein,firstmatch=ein,duplicateweedout=ein,subquery_materialization_cost_based=ein,use_index_extensions=ein,condition_fanout_filter=ein,derived_merge=ein,use_invisible_indexes=aus,skip_scan=ein

mrr_cost_based=on gibt an, ob MRR auf kostenbasierte Weise verwendet werden soll.

Verwenden Sie set @@optimizer_switch='mrr=on/off'; um MRR ein- oder auszuschalten.

select @@read_rnd_buffer_size ; Der Parameter wird verwendet, um die Puffergröße des Schlüsselwerts zu steuern. Der Standardwert beträgt 256 KB. Wenn er größer als der Parameterwert ist, sortiert der Executor die zwischengespeicherten Daten nach dem Primärschlüssel und erhält dann die Zeilendaten über den Primärschlüssel.

Zusammenfassen

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM.

Das könnte Sie auch interessieren:
  • MySQL-Lernzusammenfassung: Ein vorläufiges Verständnis des Architekturdesigns der InnoDB-Speicher-Engine
  • Schritte zur Überprüfung der MySQL InnoDB-Row_ID-Grenzwertüberschreitung
  • Wie können die Transaktionseigenschaften von MySQL InnoDB sichergestellt werden?
  • MySQL-Startfehler InnoDB: Sperren nicht möglich/ibdata1-Fehler
  • Ausführliche Erklärung des Sperrmechanismus in MySQL InnoDB
  • Detaillierte Erklärung, wie MySQL (InnoDB) mit Deadlocks umgeht
  • MySQL-Lernen (VII): Detaillierte Erläuterung des Implementierungsprinzips des Innodb Storage Engine-Index
  • MySQL slow_log-Tabelle kann nicht in InnoDB-Engine geändert werden – detaillierte Erklärung
  • Erläuterung der Konfiguration und Verwendung der MySQL-Speicher-Engine InnoDB
  • Detaillierte Erläuterung der MySQL Innodb-Speicherstruktur und der Speicherung von Nullwerten

<<:  Detaillierte Erklärung der React-Ereignisbindung

>>:  Centos7 Zabbix3.4-E-Mail-Alarmkonfiguration (Lösung des Problems, dass der E-Mail-Inhalt ein xx.bin-Anhang ist)

Artikel empfehlen

So blockieren Sie IP und IP-Bereich in Nginx

Vorne geschrieben Nginx ist nicht nur ein Reverse...

Umfassende Inventarisierung wichtiger Logdateien in MySQL

Inhaltsverzeichnis Einführung Protokollklassifizi...

HTML+CSS zum Erstellen von Herzschlag-Spezialeffekten

Heute werden wir einen einfachen Herzschlageffekt...

MySQL: Praktische Erfahrung mit der Verwendung der Insert-Anweisung

Inhaltsverzeichnis 1. Mehrere Syntaxen von Insert...

Warum Nginx besser ist als Apache

Nginx hat in nur wenigen Jahren den Großteil des ...

Empfohlene Methode zur Fehlerbehandlung für canvas.toDataURL image/png

Problemhintergrund: Es ist erforderlich, einen Sc...

Implementierung von nacos1.3.0, erstellt mit Docker

1. Fortsetzen nacos-Datenbank Datenbankname nacos...

Detaillierte Erläuterung der MySQL-Multitabellen-Joinabfrage

Inhaltsverzeichnis Abfrage zum Verbinden mehrerer...

So verwenden Sie den Linux-Befehl seq

1. Befehlseinführung Mit dem Befehl seq (Sequence...

So verwenden Sie CSS-Medienabfragen mit einem geringeren Seitenverhältnis

CSS-Medienabfragen haben ein sehr praktisches Sei...