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

Ein Beispiel für die Berechnungsfunktion calc in CSS im Website-Layout

calc ist eine Funktion in CSS, die zum Berechnen ...

Zusammenfassung der Wissenspunkte zur MySQL-Architektur

1. Datenbanken und Datenbankinstanzen Beim Studiu...

So stellen Sie MongoDB-Container mit Docker bereit

Inhaltsverzeichnis Was ist Docker einsetzen 1. Zi...

Installation und Bereitstellung des MySQL Routers

Inhaltsverzeichnis 01 Einführung in MySQL Router ...

Ein super detailliertes Vue-Router Schritt-für-Schritt-Tutorial

Inhaltsverzeichnis 1. Router-Ansicht 2. Router-Ve...

XHTML-Tutorial, eine kurze Einführung in die Grundlagen von XHTML

<br />Dieser Artikel gibt Ihnen eine kurze E...

Eine kurze Diskussion über JS-Verpackungsobjekte

Inhaltsverzeichnis Überblick Definition Instanzme...

Ist das Tag „li“ ein Blockelement?

Warum kann es die Höhe festlegen, aber im Gegensat...

So verstehen Sie den einfachen Speichermodus der Statusverwaltung von Vue

Inhaltsverzeichnis Überblick 1. Definieren Sie st...

Implementierung des Vue 3.x-Projekts basierend auf Vite2.x

Erstellen eines Vue 3.x-Projekts npm init @vitejs...