如何在 MySQL 中创建索引

17 Mar 2025 | 4 分钟阅读

索引是一种数据结构,允许我们在现有表中添加索引。它可以提高数据库表中记录的检索速度。它为索引列的每个值创建一个条目。当我们访问数据库表时,可以使用它来快速查找记录,而无需搜索数据库表中的每一行。我们可以使用表的一个或多个来创建索引,以实现高效的记录访问。

当表是使用主键或唯一键创建时,它会自动创建一个名为 PRIMARY 的特殊索引。我们称此索引为聚集索引。PRIMARY 索引以外的所有索引都称为非聚集索引或二级索引。

MySQL 索引的必要性

假设我们有一个包含用户姓名和手机号码的通讯簿。在这个通讯簿中,我们想查找 Martin Williamson 的手机号码。如果通讯簿是无序格式,意味着通讯簿中的姓名没有按字母顺序排序,我们需要翻阅所有页面并阅读每个姓名,直到找到我们正在寻找的姓名。这种查找姓名的方式称为顺序搜索。

为了从表 contactbooks 中查找用户的姓名和联系方式,通常,我们执行以下查询

这个查询非常简单易懂。尽管它能快速找到用户的电话号码和姓名,但数据库会搜索表的整个行,直到找到你想要的行。假设 contactbooks 表包含数百万行,那么在没有索引的情况下,数据检索需要花费大量时间来查找结果。在这种情况下,数据库索引在返回所需结果和提高查询整体性能方面起着重要作用。

MySQL CREATE INDEX 语句

通常,我们在数据库中创建表时会创建索引。以下语句创建一个包含两列 col2 和 col3 的带索引的表。

如果我们想在表中添加索引,我们将使用 CREATE INDEX 语句,如下所示:

在此语句中,index_name 是索引的名称,table_name 是索引所属表的名称,column_names 是列的列表。

让我们为 col4 列添加新索引,我们使用以下语句:

默认情况下,MySQL 允许索引类型为 BTREE,如果我们没有指定索引类型。下表显示了基于表存储引擎的不同类型的索引。

序号存储引擎索引类型
1.InnoDBBTREE
2.Memory/HeapHASH, BTREE
3.MYISAMBTREE

示例

在此示例中,我们将创建一个名为 student 的表,并在该表上执行 CREATE INDEX 语句。

表名:student

How to Create Index in MySQL

现在,执行以下语句以返回 classCS branch 的学生结果:

此语句将产生以下输出

How to Create Index in MySQL

在上表中,我们可以看到四行,表示 class 为 CS branch 的学生。

如果你想查看 MySQL 如何在内部执行此查询,请执行以下语句:

你将得到以下输出。这里,MySQL 扫描了包含七行的整个表来查找 class 为 CS branch 的学生。

How to Create Index in MySQL

现在,让我们使用以下语句为 class 列创建一个索引。

执行上述语句后,索引已成功创建。现在,运行下面的语句来查看 MySQL 如何在内部执行此查询。

上述语句给出如下所示的输出:

How to Create Index in MySQL

在此输出中,MySQL 从 class 索引中找到四行,而无需扫描整个表。因此,它提高了数据库表中记录的检索速度。

如果你想显示表的索引,请执行以下语句:

How to Create Index in MySQL

它将产生以下输出:


下一主题MySQL 删除索引