Heim  >  Artikel  >  Datenbank  >  Einführung in den MySQL-Index

Einführung in den MySQL-Index

王林
王林nach vorne
2020-01-30 21:11:382080Durchsuche

Einführung in den MySQL-Index

Was ist ein Index?

Ein Index ist eine Datenstruktur, die Daten effizient abruft.

Indextyp

VOLLTEXT, (HASH, BTREE [zwei werden hauptsächlich von MySQL verwendet]), RTREE.

1. FULLTEXT

ist ein Volltextindex, der derzeit nur von der MyISAM-Engine unterstützt wird. Es kann in CREATE TABLE, ALTER TABLE und CREATE INDEX verwendet werden, aber derzeit können nur Volltextindizes für CHAR-, VARCHAR- und TEXT-Spalten erstellt werden.

Der Volltextindex wurde nicht zusammen mit MyISAM entwickelt. Er schien das Problem der geringen Effizienz von Fuzzy-Text-basierten Abfragen wie WHERE name LIKE „%word%“ zu lösen.

(Empfehlung für ein kostenloses Lernvideo-Tutorial: MySQL-Video-Tutorial)

2. Aufgrund der Einzigartigkeit von HASH (fast 100 % einzigartig) und eines ähnlichen Schlüssels Werte Die richtige Form eignet sich zur Verwendung als Index.

Der HASH-Index kann einmal gefunden werden und muss nicht wie ein Baumindex Schicht für Schicht durchsucht werden, sodass er äußerst effizient ist. Diese Effizienz ist jedoch bedingt, das heißt, sie ist nur unter den Bedingungen „=“ und „in“ effizient und bei Bereichsabfragen, Sortierungen und kombinierten Indizes immer noch nicht effizient.

3. BTREE

Der BTREE-Index ist eine Art Methode, die den Indexwert gemäß einem bestimmten Algorithmus in einer baumförmigen Datenstruktur speichert Durchlaufen Sie ausgehend von der Wurzel die Knoten nacheinander, um das Blatt zu erhalten. Dies ist der standardmäßige und am häufigsten verwendete Indextyp in MySQL.

4. RTREE


RTREE wird in MySQL selten verwendet und unterstützt nur den Geometriedatentyp. Die einzigen Speicher-Engines, die diesen Typ unterstützen, sind MyISAM, BDb, InnoDb, NDb und Archiv.

Im Vergleich zu BTREE liegt der Vorteil von RTREE in der Bereichssuche.

Indextyp

Normaler Index: nur beschleunigte Abfrage

Einzigartiger Index: beschleunigte Abfrage + eindeutiger Spaltenwert (kann Null haben)

Primärschlüsselindex: Abfrage beschleunigen + eindeutiger Spaltenwert (darf nicht Null sein) + nur einer in der Tabelle

Kombinierter Index: Mehrere Spaltenwerte bilden einen Index, der speziell für die kombinierte Suche und seine Effizienz verwendet wird ist größer als die Indexzusammenführung

Volltextindex: Textinhalt segmentieren und durchsuchen

Index verwenden

1. Index erstellen

1 --创建普通索引CREATE INDEX index_name ON table_name(col_name);
2 --创建唯一索引CREATE UNIQUE INDEX index_name ON table_name(col_name);
3 --创建普通组合索引CREATE INDEX index_name ON table_name(col_name_1,col_name_2);
4 --创建唯一组合索引CREATE UNIQUE INDEX index_name ON table_name(col_name_1,col_name_2);

2. Erstellen Sie einen Index, indem Sie die Tabellenstruktur ändern

ALTER TABLE table_name ADD INDEX index_name(col_name);

3 Geben Sie den Index direkt beim Erstellen der Tabelle an


CREATE TABLE table_name (
    ID INT NOT NULL,col_name VARCHAR (16) NOT NULL,INDEX index_name (col_name)
);

Löschen Sie den Index


--直接删除索引DROP INDEX index_name ON table_name;
--修改表结构删除索引ALTER TABLE table_name DROP INDEX index_name;

5. Andere Befehle


- 查看表结构
    desc table_name;
 - 查看生成表的SQL
    show create table table_name;
 - 查看索引
    show index from  table_name;
 - 查看执行时间
    set profiling = 1;
    SQL...
    show profiles;

Gründe für Indexfehler

1.

2. Die Nichteinhaltung der optimalen Präfixregel kann ebenfalls zu einem Indexfehler führen.

3. Eine (Berechnung, Funktion, (automatische oder manuelle) Typkonvertierung) für den Index führt dazu, dass der Index fehlschlägt und zu einem vollständigen Tabellenscan führt.

4. MySQL kann den Index nicht verwenden, wenn er ungleich (a8093152e673feb7aba1828c43532094, !=) ist, was zu einem vollständigen Tabellenscan führt.

5. Der Index kann nicht verwendet werden, auch wenn er null ist oder nicht.

6. Die Verwendung eines Platzhalterschalters wie ('%abc') führt zu einem Indexfehler und einem vollständigen Tabellenscan.

7. Der String-Index ohne einfache Anführungszeichen ist ungültig.

8. Verwenden Sie oder weniger, da eine Verbindung mit oder zu einem Indexfehler führt.

9. Verwenden Sie die Abfrage „select*“ und versuchen Sie, den abdeckenden Index zu verwenden.

MySQL-Indexspezifikation

1. [Pflichtfeld] Felder mit eindeutigen Merkmalen im Geschäftsleben, auch wenn es sich um eine Kombination mehrerer Felder handelt, müssen in einen eindeutigen Index integriert werden (Hinweis: Denken Sie nicht, dass sich der eindeutige Index auf die Einfügegeschwindigkeit auswirkt. Dieser Geschwindigkeitsverlust kann ignoriert werden,

aber die Verbesserung der Suchgeschwindigkeit ist offensichtlich; auch wenn eine sehr vollständige Überprüfungskontrolle durchgeführt wird der Anwendungsschicht, solange es keinen eindeutigen Index gibt, müssen gemäß Murphys Gesetz schmutzige Daten generiert werden)

2. [Obligatorisch] Das Verknüpfen von mehr als drei Tabellen ist verboten. Die Datentypen der zu verknüpfenden Felder müssen absolut konsistent sein; bei der Durchführung von Abfragen mit mehreren Tabellen wird sichergestellt, dass die zugehörigen Felder über Indizes verfügen müssen.


(Hinweis: Auch wenn Sie einer Doppeltabelle beitreten, müssen Sie auf Tabellenindizes und SQL-Leistung achten.)

3. Beim Erstellen eines Indexes für einen Varchar Im Feld müssen Sie die Indexlänge angeben. Es ist nicht erforderlich, das gesamte Feld zu indizieren. Bestimmen Sie einfach die Indexlänge basierend auf der tatsächlichen Textunterscheidung.


(Hinweis: Indexlänge und Diskriminierung sind zwei Widersprüche. Im Allgemeinen weist der Index mit einer Länge von 20 bei Daten vom Typ String eine Diskriminierung von mehr als 90 % auf,

Sie können die Unterscheidung von count(distinct left(column name, index length))/count(*) zur Bestimmung verwenden)

4. Left Fuzzy oder Full Fuzzy ist bei der Seitensuche strengstens verboten . Bitte fragen Sie bei Bedarf nach.


(Hinweis: Die Indexdatei verfügt über die am weitesten links stehende Präfix-Übereinstimmungsfunktion von B-Tree. Wenn der Wert auf der linken Seite unbestimmt ist, kann dieser Index nicht verwendet werden.)

Empfohlen im Zusammenhang Artikel-Tutorials:

MySQL-Tutorial

Das obige ist der detaillierte Inhalt vonEinführung in den MySQL-Index. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:cnblogs.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen