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

Lösung zum Vergessen des Administratorkennworts der MySQL-Datenbank

1. Geben Sie den Befehl mysqld --skip-grant-table...

Der JavaScript-Artikel zeigt Ihnen, wie Sie mit Webformularen spielen

1. Einleitung Zuvor haben wir die schnelle Entwic...

Vue implementiert das Hinzufügen eines Wasserzeicheneffekts zur Seite

Als ich kürzlich an einem Projekt arbeitete, wurd...

Zwei Arten von Tab-Anwendungen im Webdesign

Heutzutage werden Registerkarten häufig im Webdes...

MySQL-Triggersyntax und Anwendungsbeispiele

Dieser Artikel veranschaulicht anhand von Beispie...

js implementiert ein einfaches Warenkorbmodul

In diesem Artikelbeispiel wird der spezifische Co...

Beispiel für die Verwendung von JS, um zu bestimmen, ob ein Element ein Array ist

Hier sind die Arten von Daten, die überprüft werd...

TinyEditor ist ein einfacher und benutzerfreundlicher HTML-WYSIWYG-Editor

Vor einigen Tagen habe ich Ihnen einen inländisch...

Detaillierte Erklärung der Mencached-Cache-Konfiguration basierend auf Nginx

Einführung Memcached ist ein verteiltes Caching-S...

Eine kurze Diskussion über JavaScript-Drosselung und Anti-Shake

Inhaltsverzeichnis Drosselung und Anti-Shake Konz...