# 索引
索引是建立在数据表中列上的一个数据库对象,通过创建数据的有序集合来加快数据检索速度,在一个表中可以给一列或者多列设置索引。如果在查询数据时,使用了设置的索引列作为查询列,那么就会大大提高查询速度。
# 索引的类型
- 普通索引(Normal Index):
- 最基本的索引类型。
- 可以加速
SELECT
查询,但不唯一。
- 唯一索引(Unique Index):
- 确保索引列中的所有值都是唯一的。
- 适用于需要唯一标识每一行的情况。
- 主键索引(Primary Key Index):
- 特殊的唯一索引,不允许有 NULL 值。
- 每个表只能有一个主键。
- 全文索引(Full-Text Index):
- 用于文本搜索。
- 支持
MATCH ... AGAINST
语法进行全文搜索。
- 组合索引(Composite Index):
- 在多个列上创建的索引。
- 提高多列查询的效率。
- 空间索引(Spatial Index):
- 用于空间数据类型(如
GEOMETRY
)。 - 适用于地理信息系统(GIS)应用。
- 用于空间数据类型(如
- 哈希索引(Hash Index):
- 主要在内存表(如
MEMORY
引擎)中使用。 - 提供快速查找,但不支持范围查询。
- 主要在内存表(如
注意
虽然索引可以提高列的查询速度,但是过多地使用索引,却会降低 MySQL
本身的系统性能,主要包括以下两点
# 创建索引
在MySQL
中,我们可以使用create index
语句来创建一个索引。需要注意的是,我们只能对表进行创建索引,而不能对视图进行创建索引。
create index 索引名
on 表名(列名);
1
2
2
# 使用示例:创建不同类型索引
# 1. 普通索引
CREATE INDEX idx_major ON students (major);
1
# 2. 唯一索引
CREATE UNIQUE INDEX idx_unique_email ON users (email);
1
# 3. 组合索引
CREATE INDEX idx_name_major ON students (name, major);
1
# 4. 全文索引
CREATE FULLTEXT INDEX idx_fulltext_description ON articles (description);
1
# 查看索引
可以使用 SHOW INDEX
语句查看表上的索引信息。
SHOW INDEX FROM students;
1
# 删除索引
使用 DROP INDEX
语句删除索引。
SHOW INDEX FROM students;
1