Heim  >  Artikel  >  Datenbank  >  Wozu dienen Indizes in der MySQL-Datenbank?

Wozu dienen Indizes in der MySQL-Datenbank?

WBOY
WBOYnach vorne
2023-06-03 11:18:572505Durchsuche

1. Einführung in MySQL-Indizes

Indizes sind ein „Verzeichnis“, das die MySQL-Datenbank einer oder mehreren Spalten in der Tabelle hinzufügt, um die Datenabfrage zu beschleunigen. Der Index von MySQL ist eine spezielle Datei, aber der Index der Tabelle der Engine vom Typ InnoDB (wir werden die MySQL-Engine in einem zukünftigen Artikel erklären) ist ein integraler Bestandteil des Tabellenbereichs.
MySQL-Datenbank unterstützt insgesamt 5 Arten von Indizes, nämlich gewöhnliche Indizes, eindeutige Indizes, Primärschlüsselindizes, zusammengesetzte Indizes und Volltextindizes. Im Folgenden werde ich diese vier Arten von Indizes einzeln vorstellen.

2. Detaillierte Erläuterung der fünf Arten von MySQL-Indizes

(1) Gewöhnlicher Index

Gewöhnlicher Index ist ein allgemeiner Index in der MySQL-Datenbank Das Hinzufügen von Spalten mit gewöhnlichen Indizes stellt keine besonderen Anforderungen an die Daten. Die Funktion gewöhnlicher Indizes besteht darin, differenzielle Abfragen zu beschleunigen.
Ein Beispiel für das Hinzufügen einer gemeinsamen Index-SQL-Anweisung beim Erstellen einer Datentabelle lautet wie folgt:

create table exp(id int , name varchar(20),index exp_name(name));

Oder ersetzen Sie den Index wie folgt durch den Schlüssel:

create table exp (id ,int , name varahcr (20) ,  key exp_name(name));

In Der obige SQL-Befehl, Schlüssel oder Index bedeutet das Hinzufügen eines Index, gefolgt vom Indexnamen, und die Spalte in Klammern ist die Spalte, die dem Index hinzugefügt werden soll.
Für alle in diesem Artikel vorgestellten indexbezogenen SQL-Anweisungen kann der Index durch einen Schlüssel ersetzt werden. Um die Länge des Artikels zu sparen, wird dieser Punkt in Zukunft nicht wiederholt.
Darüber hinaus können wir auch einen Index hinzufügen, ohne den Namen des Index anzugeben. In diesem Fall fügt MySQL dem Index automatisch einen Indexnamen mit demselben Namen wie das Feld hinzu.
Die Ausführungsergebnisse lauten wie folgt:

Wozu dienen Indizes in der MySQL-Datenbank?

Nach dem Erstellen der Datentabelle folgt das Beispiel für das Hinzufügen einer neuen normalen Index-SQL-Anweisung zur Tabelle ist wie folgt:

alter table exp add index exp_id(id);
# 🎜🎜#Das Ausführungsergebnis ist wie folgt:

Wozu dienen Indizes in der MySQL-Datenbank?

Das SQL-Anweisungsbeispiel zum Löschen des normalen Index danach Das Erstellen der Datentabelle ist wie folgt:

alter table drop index exp_name;

Ausführung Das Ergebnis ist wie folgt:

Wozu dienen Indizes in der MySQL-Datenbank?

Beachten Sie, dass im obigen Befehl , exp_name ist der Name des Index und nicht der Name des Feldes, das den Index enthält. Wenn wir die Tabelle vergessen, können Sie für den Indexnamen den folgenden SQL-Befehl zur Abfrage ausführen:

show index from exp;

where exp ist der Tabellenname und das Ausführungsergebnis dieses Befehls lautet wie folgt:

#🎜🎜 #Wozu dienen Indizes in der MySQL-Datenbank?Wie Sie auf den obigen Bildern sehen können, nach dem Hinzufügen eines Normalen Index: Wenn Sie desc verwenden, um die Tabellenstruktur anzuzeigen, finden Sie MUL in der Schlüsselspalte, was bedeutet, dass der Spalte ein normaler Index hinzugefügt wird.

(2) Eindeutiger Index

Der eindeutige Index basiert auf dem gewöhnlichen Index und erfordert, dass alle Werte der zum Index hinzugefügten Spalte nur einmal erscheinen dürfen. Häufig verwendete Begriffe für eindeutige Indizes werden in Feldern wie ID-Nummer und Studentennummer hinzugefügt, können jedoch nicht in Feldern wie Name und Name hinzugefügt werden.

Das Hinzufügen eines eindeutigen Index ist fast identisch mit dem eines normalen Index, außer dass der Schlüssel und der Index des normalen Index durch einen eindeutigen Schlüssel und einen eindeutigen Index ersetzt werden müssen.

Ein Beispiel für die SQL-Anweisung zum Hinzufügen eines eindeutigen Index beim Erstellen einer Datentabelle lautet wie folgt:

create table exp (id int, name varchar(20), unique key (name));

Das Ausführungsergebnis des obigen Befehls lautet wie folgt:

#🎜 🎜#

Es ist ersichtlich, dass bei Verwendung des Befehls desc zum Abfragen der Tabellenstruktur nach einem Feld, dem ein eindeutiger Index hinzugefügt wurde, UNI in der Schlüsselspalte angezeigt wird, was darauf hinweist Dem Feld wurde ein eindeutiger Index hinzugefügt. Wozu dienen Indizes in der MySQL-Datenbank?Das SQL-Anweisungsbeispiel zum Hinzufügen eines eindeutigen Indexes nach dem Erstellen der Datentabelle lautet wie folgt:


Das SQL-Anweisungsbeispiel zum Löschen des eindeutigen Indexes Der Index lautet wie folgt:# 🎜🎜#

alter table exp drop index name;
Wozu dienen Indizes in der MySQL-Datenbank?Die Ausführungsergebnisse lauten wie folgt:

(3) Primärschlüsselindex #🎜🎜 #

Der Primärschlüsselindex ist die Datenbank. Die Abfragegeschwindigkeit ist die schnellste unter allen Indizes, und jede Datentabelle kann nur eine Primärschlüsselindexspalte haben. Durch den Primärschlüssel indizierte Spalten erlauben keine doppelten Daten oder Nullwerte. Wozu dienen Indizes in der MySQL-Datenbank? Das Hinzufügen und Löschen von Primärschlüsselindizes ist den normalen Indizes und eindeutigen Indizes sehr ähnlich, mit der Ausnahme, dass der Schlüssel durch den Primärschlüssel ersetzt wird. Die relevanten SQL-Befehle lauten wie folgt:

create table exp(id int ,name varchar(20), primary key (id));alter table exp add primary key (id);

Die Spalte des Primärschlüsselindex wird hinzugefügt, und der PRI wird in der Schlüsselspalte angezeigt, wenn desc die Tabellenstruktur anzeigt, wie unten gezeigt: #🎜 🎜#


Um den Primärschlüsselindex zu löschen, können Sie den Befehl ausführen:

alter table exp drop primary key;

Beachten Sie, dass in dieser SQL-Anweisung der Schlüssel nicht sein darf durch Index ersetzt.

Wenn wir versuchen, den Primärschlüsselindex zu löschen, lehnt MySQL dies möglicherweise ab, weil das Attribut auto_increment dem Feld hinzugefügt wurde unten dargestellt: Wozu dienen Indizes in der MySQL-Datenbank?

(四)复合索引

如果想要创建一个包含不同的列的索引,我们就可以创建符合索引。其实,复合索引在业务场景中应用的非常频繁,比如,如果我们想要记录数据包的内容,则需要将IP和端口号作为标识数据包的依据,这时就可以把IP地址的列和端口号的列创建为复合索引。复合、添加和删除索引创建SQL语句示例如下:

create table exp (ip varchar(15),port int ,primary key (ip,port));
alter table exp add pirmary key(ip ,port);
alter table exp dorp priamary key;

复合索引在创建后,在使用desc查看数据表结构时,会在Key列中发现多个PRI,这就表示这些含有PRI的列就是复合索引的列了。如下所示:

Wozu dienen Indizes in der MySQL-Datenbank?

注意,复合索引相当于一个多列的主键索引,因此,添加复合索引的任何一个列都不允许数据为空,并且这些列不允许数据完全相同,否则MySQL数据库会报错。如下所示:

Wozu dienen Indizes in der MySQL-Datenbank?

(五)全文索引

全文索引主要是用于解决大数据量的情况下模糊匹配的问题。如果数据库中某个字段的数据量非常大,那么如果我们想要使用like+通配符的方式进行查找,速度就会变得非常慢。针对这种情况,我们就可以使用全文索引的方式,来加快模糊查询的速度。全文索引的原理便是通过分词技术,分析处文本中关键字及其出现的频率,并依次建立索引。全文索引的使用,与数据库版本、数据表引擎乃至字段类型息息相关,主要限制如下:
1、MySQL3.2版本以后才支持全文索引。
2、MySQL5.7版本以后MySQL才内置ngram插件,全文索引才开始支持中文。
3、MySQL5.6之前的版本,只有MyISAM引擎才支持全文索引。
4、MySQL5.6以后的版本,MyISAM引擎和InnoDB引擎都支持全文索引。
5、只有字段数据类型为char、varchar、以及text的字段才支持添加全文索引。
创建、添加以及删除全文索引SQL命令如下:

create table exp (id int ,content text ,filltext key (content))engine=MyISAM;
alter table exp add fulltext index (content);
alter table exp drop index content;

部分执行结果如下:

Wozu dienen Indizes in der MySQL-Datenbank?

在创建了全文索引后,也不能够使用like+通配符的方式进行模糊查询,全文索引的使用有其特定的语法,如下所示:

select * from exp where match(content) against ('a');

其中,match后面的括号里是含有全文索引的字段,against后面的括号里是要模糊匹配的内容。
此外,全文索引的作用并不是唯一的,在很多场景下,我们并不会使用MySQL数据库内置的全文索引,而是使用第三方类似的索引以实现相同的功能。

三、MySQL索引使用原则

1、索引是典型的“以空间换时间”的策略,它会消耗计算机存储空间,但是会加快查询速度。
2、索引的添加,尽管加快了在查询时的查询速度,但是会减慢在插入、删除时的速度。因为在插入、删除数据时需要进行额外的索引操作。
3、索引并非越多越好,数据量不大时不需要添加索引。
4、如果一个表的值需要频繁的插入和修改,则不适合建立索引,反制,如果一个表中某个字段的值要经常进行查询、排序和分组的字段则需要建立索引。
5、如果一个字段满足建立唯一性索引的条件,就不要建立普通索引。

Das obige ist der detaillierte Inhalt vonWozu dienen Indizes in der MySQL-Datenbank?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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