Prinzipien der Indizierung – am Beispiel von innodb
1. Vorab schreiben
Da die Entwicklungs- und Testaufgaben zu Ende gehen, erledigen alle einige vorbereitende Arbeiten vor der Veröffentlichung des Projekts. Eine der wichtigen Aufgaben ist die Erstellung einiger SQL-Anweisungen Der Index ist in einer Umgebung mit hoher Parallelität und hohem Datenverkehr sehr wichtig. Der Aufbau eines guten Index kann die Abfrageeffizienz von SQL-Anweisungen erheblich verbessern ? In diesem Artikel wird als Beispiel die MySQL-Innodb-Speicher-Engine verwendet und untersucht, wie ein guter Index basierend auf tatsächlichen Projekten erstellt wird.
2. Indexdefinition
Die offizielle Indexdefinition von MySQL lautet: Index (Index) ist eine Datenstruktur, die MySQL dabei hilft, Daten effizient zu erhalten. Durch Extrahieren des Satzstamms können Sie die Essenz des Index ermitteln: Der Index ist eine Datenstruktur.
Wir wissen, dass die Datenbankabfrage eine der wichtigsten Funktionen der Datenbank ist, wie zum Beispiel die folgende SQL-Anweisung: SELECT * FROM test_table WHERE id = 99; Der Datensatz mit der ID 99 kann aus der Tabelle test_table abgerufen werden.
Wir alle möchten Daten so schnell wie möglich abfragen, daher optimieren Designer von Datenbanksystemen die Abfragealgorithmen aus Sicht. Der grundlegendste Abfragealgorithmus ist natürlich die lineare Suche. Er durchläuft test_table und gleicht dann Zeile für Zeile ab, ob der Wert der ID 99 ist. Dieser Algorithmus mit einer Komplexität von O(n) ist offensichtlich schlecht, wenn die Datenmenge groß ist Die Entwicklung der Informatik hat viele bessere Suchalgorithmen hervorgebracht, wie z. B. die binäre Suche, die binäre Baumsuche usw. Wenn Sie eine kleine Analyse durchführen, werden Sie feststellen, dass jeder Suchalgorithmus nur auf eine bestimmte Datenstruktur angewendet werden kann. Beispielsweise erfordert die binäre Suche, dass die abgerufenen Daten geordnet sind, während die binäre Baumsuche nur auf binäre Suchbäume angewendet werden kann. Aber die Daten selbst Die Organisationsstruktur kann verschiedene Datenstrukturen nicht vollständig erfüllen (z. B. ist es theoretisch unmöglich, beide Spalten gleichzeitig in der richtigen Reihenfolge zu organisieren). Daher verwaltet das Datenbanksystem zusätzlich zu den Daten auch Datenstrukturen, die bestimmte Anforderungen erfüllen Suchalgorithmen verweisen in irgendeiner Weise auf Daten, sodass erweiterte Suchalgorithmen auf diesen Datenstrukturen implementiert werden können. Diese Datenstruktur ist ein Index.
Das obige Beispiel wird hauptsächlich verwendet, um die Rolle des Indexes kurz zu veranschaulichen. Die meisten Datenbanksysteme und Dateisysteme, einschließlich MySQL Innodb, wählen nicht die Binärbaumstruktur als Index, sondern verwenden B-Tree oder seine Variante B+ Tree wird als Indexstruktur verwendet, um die Anzahl der Festplatten-E/A-Zugriffe während des Suchvorgangs zu minimieren. Was B-Tree oder B+Tree ist und warum sie als Datenbankindexstrukturen ausgewählt werden, erfahren Sie hier und lernen. Im Folgenden stellen wir zunächst die beiden B+Tree-Indizes der MySQL-Innodb-Engine vor.
3. Mysql Innodb B+Tree-Index
Einer ist der Primärschlüsselindex, der Cluster-Index (Cluster-Index), der nicht nur den Primärschlüssel enthält, sondern auch alle Daten, zu denen der Primärschlüssel gehört. In Innodb ist der Primärschlüsselindex die Daten.
Einer ist ein Nicht-Primärschlüsselindex (Sekundärindex), in dem der Spaltenwert der Schlüssel und die Position des Primärschlüssels sind ist Wert, also (Spaltenwert, Primärschlüsselposition)
Innodb ist ein Index -organisierte Tabelle, und alle Daten werden unter dem Primärschlüssel-Blattknoten aufgehängt. Wenn die Einfügungsreihenfolge der Primärschlüssel nicht garantiert werden kann, kommt es daher zu einer großen Anzahl von Primärschlüsselknotenaufteilungen, was zu einer großen Anzahl von E/A-Vorgängen führt. Darüber hinaus schreibt Innodb vor, dass die Länge eines einzelnen Indexfelds 768 Bytes nicht überschreiten darf, andernfalls wird die Länge gekürzt und nicht in den Index aufgenommen. Die Nicht-Primärschlüsselindizes von Innodb verweisen alle auf den Primärschlüsselindex. Durch die Suche nach dem Nicht-Primärschlüsselindex kann nicht die gesamte Datenzeile ermittelt werden. Sie müssen die Position des Primärschlüsselindex über den Zeiger des Blattknotens ermitteln Daher muss der Primärschlüsselindex so klein wie möglich gestaltet werden. Andernfalls wird der Nicht-Primärschlüsselindex sehr groß.
4. Grundsätze der Indexierung
Als nächstes werfen wir einen Blick auf die Prinzipien, die befolgt werden müssen, um einen guten Index zu erstellen, und veranschaulichen dies anhand spezifischer Beispiele.
1 Das Prinzip der Übereinstimmung mit dem Präfix ganz links, ein sehr wichtiges Prinzip, mit dem MySQL immer übereinstimmt rechts, bis die Abfrage „Übereinstimmung bei Erreichen des Bereichs stoppen“ (>, von (a, b, c, d) wird D nicht für die Indizierung verwendet. Wenn Sie einen Index für (a, b, d, c) erstellen, kann die Reihenfolge von a, b, d angepasst werden willkürlich.
2. = und in können nicht in der richtigen Reihenfolge sein, z. B. a = 1 und b = 2 und c = 3. Sie können (a, b, c)-Indizes in beliebiger Reihenfolge erstellen. Der Abfrageoptimierer von MySQL hilft Ihnen bei der Optimierung den Index in eine erkennbare Form.
3. Versuchen Sie, Spalten mit hoher Unterscheidung als Indizes auszuwählen. Die Formel für die Unterscheidung lautet count(distinct col)/count(*), die den Anteil der Felder darstellt, die sich nicht wiederholen Wir scannen und die Eindeutigkeit Der Unterscheidungsgrad des Schlüssels beträgt 1, während der Unterscheidungsgrad einiger Status- und Geschlechtsfelder angesichts von Big Data 0 sein kann. Dann könnte jemand fragen, ob es einen empirischen Wert für dieses Verhältnis gibt. Verschiedene Verwendungsszenarien erschweren die Bestimmung dieses Werts. Im Allgemeinen erfordern wir, dass die Felder, die verbunden werden müssen, über 0,1 liegen, d „sauber“, wie from_unixtime (create_time) = „2015-08-14“ Der Grund dafür ist sehr einfach. Der b+-Baum speichert jedoch die Feldwerte in der Datentabelle Zum Vergleich müssen die Funktionen auf alle Elemente angewendet werden. Offensichtlich sind die Kosten zu hoch. Daher sollte die Anweisung als create_time = unix_timestamp(‘2015-08-14’) geschrieben werden.
5. Erweitern Sie den Index so weit wie möglich, erstellen Sie keinen neuen Index. Wenn beispielsweise bereits ein Index von a in der Tabelle vorhanden ist und Sie nun einen Index von (a, b) hinzufügen möchten, müssen Sie nur den ursprünglichen Index ändern.
6. Wenn Sie in der Order by- oder Group by-Klausel nach Index sortieren möchten, muss die Reihenfolge der Indexspalten mit der Reihenfolge der order by- oder Group by-Klausel und der Sortierrichtung aller Spalten übereinstimmen (umgekehrte Reihenfolge oder positive Reihenfolge) sind gleich; wenn die Abfrage mehreren Tabellen zugeordnet ist, kann der Index nur dann zum Sortieren verwendet werden, wenn die Felder, auf die in der order by-Klausel verwiesen wird, alle aus der ersten Tabelle stammen gruppieren nach-Anweisungen und Abfragetyp-Anweisungen sind das Gleiche: Das Präfixprinzip ganz links im Index muss erfüllt sein. Andernfalls führt MySQL einen Sortiervorgang durch und kann den Index nicht zum Sortieren verwenden Die by-Klausel erfüllt nicht das Präfixprinzip ganz links, d.
Erstellen Sie (Status, Netting_Batch_No, Debtor_Agent_Member_ID). Debtor_agent_member_id,transaction_currency);
Wenn Sie alles berücksichtigen, reicht tatsächlich ein Index aus, nämlich (netting_batch_no,debtor_agent_member_id). Es besteht keine Notwendigkeit, die Felder „status“ oder „transaction_currency“ in den Index aufzunehmen, da diese beiden Felder unterschiedlich sind ist zu schlecht;
Nach dem Indexierungsprinzip 2 kann Aussage 1 zu diesem Index gehen.
Nach dem Indexierungsprinzip 1 kann auch Aussage 2 zu diesem Index gehen . Wenn Sie zu viele Indizes erstellen, erhöht sich der Verbrauch an Datenbankspeicher oder Datenträger und die Leistung von Vorgängen wie dem Einfügen und Löschen wird beeinträchtigt. Sie müssen die Prinzipien der Indexerstellung befolgen und alles berücksichtigen > Das Obige sind die Prinzipien der Indizierung – am Beispiel von innodb. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



InnoDB ist eine der Datenbank-Engines von MySQL und einer der Standards für Binärversionen von MySQL AB. Ein zweigleisiges Autorisierungssystem ist die GPL-Autorisierung, das andere ist proprietäre Software Genehmigung. InnoDB ist die bevorzugte Engine für Transaktionsdatenbanken und unterstützt Transaktionssicherheitstabellen (ACID). InnoDB unterstützt Sperren auf Zeilenebene, die die Parallelität weitgehend unterstützen können. Sperren auf Zeilenebene werden von der Speicher-Engine-Ebene implementiert.

InnoDB ist eine Speicher-Engine, die Daten in Tabellen auf der Festplatte speichert, sodass unsere Daten auch nach dem Herunterfahren und Neustarten noch vorhanden sind. Der eigentliche Prozess der Datenverarbeitung findet im Speicher statt, daher müssen die Daten auf der Festplatte in den Speicher geladen werden. Wenn eine Schreib- oder Änderungsanforderung verarbeitet wird, muss auch der Inhalt im Speicher auf der Festplatte aktualisiert werden. Und wir wissen, dass die Geschwindigkeit beim Lesen und Schreiben auf die Festplatte sehr langsam ist, was sich um mehrere Größenordnungen vom Lesen und Schreiben im Speicher unterscheidet. Wenn wir also bestimmte Datensätze aus der Tabelle abrufen möchten, muss die InnoDB-Speicher-Engine lesen die Datensätze einzeln von der Festplatte löschen? Die von InnoDB verwendete Methode besteht darin, die Daten in mehrere Seiten aufzuteilen und Seiten als grundlegende Interaktionseinheit zwischen Festplatte und Speicher zu verwenden. Die Größe einer Seite in InnoDB beträgt im Allgemeinen 16

1. Führen Sie einen Rollback durch und installieren Sie MySQL neu. Um die Probleme beim Importieren dieser Daten von anderen Orten zu vermeiden, erstellen Sie zunächst eine Sicherungskopie der Datenbankdatei der aktuellen Bibliothek (/var/lib/mysql/location). Als nächstes deinstallierte ich das Perconaserver5.7-Paket, installierte das ursprüngliche alte 5.1.71-Paket neu, startete den MySQL-Dienst und er meldete Unknown/unsupportedtabletype:innodb und konnte nicht normal gestartet werden. 11050912:04:27InnoDB:Initializingbufferpool,size=384.0M11050912:04:27InnoDB:Complete

Vergleich der Auswahl der MySQL-Speicher-Engine: Bewertung des InnoDB-, MyISAM- und Speicherleistungsindex Einführung: In der MySQL-Datenbank spielt die Wahl der Speicher-Engine eine entscheidende Rolle für die Systemleistung und Datenintegrität. MySQL bietet eine Vielzahl von Speicher-Engines. Zu den am häufigsten verwendeten Engines gehören InnoDB, MyISAM und Memory. In diesem Artikel werden die Leistungsindikatoren dieser drei Speicher-Engines bewertet und anhand von Codebeispielen verglichen. 1. InnoDB-Engine InnoDB ist mein

1. MySQL-Transaktionsisolationsstufe: Bei mehreren Transaktions-Parallelitätskonflikten können einige Probleme wie schmutziges Lesen, nicht wiederholbares Lesen und Phantomlesen auftreten, und innoDB löst sie im wiederholbaren Leseisolationsstufenmodus des Phantom-Lesens, 2. Was ist Phantom-Lesen? Das bedeutet, dass in derselben Transaktion die Ergebnisse, die wir erhalten, wenn wir denselben Bereich vorher und nachher zweimal abfragen, inkonsistent sind, wie in der ersten Transaktion gezeigt Zu diesem Zeitpunkt gibt es nur ein Datenelement, das die Bedingungen erfüllt. In der zweiten Transaktion wird eine Datenzeile eingefügt und bei der ersten Transaktion erneut abgefragt Beachten Sie, dass die ersten und zweiten Abfragen der ersten Transaktion identisch sind

Die Volltext-Suchfunktionen von InnoDB sind sehr leistungsfähig, was die Effizienz der Datenbankabfrage und die Fähigkeit, große Mengen von Textdaten zu verarbeiten, erheblich verbessern kann. 1) InnoDB implementiert die Volltext-Suche durch invertierte Indexierung und unterstützt grundlegende und erweiterte Suchabfragen. 2) Verwenden Sie die Übereinstimmung und gegen Schlüsselwörter, um den Booleschen Modus und die Phrasesuche zu unterstützen. 3) Die Optimierungsmethoden umfassen die Verwendung der Word -Segmentierungstechnologie, die regelmäßige Wiederaufbauung von Indizes und die Anpassung der Cache -Größe, um die Leistung und Genauigkeit zu verbessern.

MySQL ist ein weit verbreitetes Datenbankverwaltungssystem und verschiedene Speicher-Engines haben unterschiedliche Auswirkungen auf die Datenbankleistung. MyISAM und InnoDB sind die beiden am häufigsten verwendeten Speicher-Engines in MySQL. Sie haben unterschiedliche Eigenschaften und eine unsachgemäße Verwendung kann die Leistung der Datenbank beeinträchtigen. In diesem Artikel wird erläutert, wie Sie diese beiden Speicher-Engines verwenden, um die MySQL-Leistung zu optimieren. 1. MyISAM-Speicher-Engine MyISAM ist die am häufigsten verwendete Speicher-Engine für MySQL. Ihre Vorteile sind hohe Geschwindigkeit und geringer Speicherplatz. MyISA

Tipps und Strategien zur Verbesserung der Leseleistung der MySQL-Speicher-Engine: Vergleichende Analyse von MyISAM und InnoDB Einführung: MySQL ist eines der am häufigsten verwendeten relationalen Open-Source-Datenbankverwaltungssysteme, das hauptsächlich zum Speichern und Verwalten großer Mengen strukturierter Daten verwendet wird. In Anwendungen ist die Leseleistung der Datenbank oft sehr wichtig, da Lesevorgänge in den meisten Anwendungen die Hauptoperationsart darstellen. Dieser Artikel konzentriert sich auf die Verbesserung der Leseleistung der MySQL-Speicher-Engine und konzentriert sich auf eine vergleichende Analyse von MyISAM und InnoDB, zwei häufig verwendeten Speicher-Engines.
