详解MySQL单列索引和联合索引
在关系型数据库中,索引是一种常见且重要的优化技术,可加速查询操作的执行速度。MySQL中,常见的索引类型包括单列索引和联合索引。本文将详细介绍这两种索引类型。
单列索引
定义
单列索引(也称为单字段索引或简单索引)是对一列或多列中的单个字段创建的索引。单列索引包括唯一索引和普通索引两种类型。
- 唯一索引:索引字段的值必须唯一,或者允许为NULL(但只允许一个NULL值)。创建唯一索引的语法如下:
CREATE UNIQUE INDEX index_name ON table_name (column_name)
- 普通索引:索引字段的值可以重复。创建普通索引的语法如下:
CREATE INDEX index_name ON table_name (column_name)
优缺点
- 优点:单列索引查询速度快,适用于单一查询、排序的场景;
- 缺点:当索引字段数据重复度很高时,查询性能可能退化,造成表扫描,甚至比不使用索引还慢。
示例说明
以查询学生表中姓“王”的学生信息为例,创建单列索引可用以下两种语法:
- 使用CREATE INDEX语句创建普通索引:
CREATE INDEX idx_stu_name ON student (name);
- 使用ALTER TABLE语句添加普通索引:
ALTER TABLE student ADD INDEX idx_stu_name (name);
联合索引
定义
联合索引(也称为组合索引)是多个列上的索引,可加速联合查询和模糊查询的速度。联合索引可以包含多个列,这些列可以使用多种不同的索引类型进行定义。常见的索引类型包括B-Tree索引、哈希索引和全文索引。
- B-Tree索引:用于常规查询;
- 哈希索引:用于精确查询;
- 全文索引:用于全文查询。
定义
- 定义联合索引的语法如下:
CREATE INDEX index_name ON table_name (column1, column2, ...);
优缺点
- 优点:联合索引可以加速多个列查询的速度,适用于多条件查询的场景;
- 缺点:当查询条件不涉及索引起始列时,索引失效,需要进行全表扫描。
示例说明
以查询学生表中姓“王”且年龄在20到25岁之间的学生信息为例,创建联合索引可用以下语句:
CREATE INDEX idx_stu_info ON student (name, age);
或
ALTER TABLE student ADD INDEX idx_stu_info (name, age);
然后使用以下SQL语句进行查询:
SELECT * FROM student WHERE name = '王' AND age BETWEEN 20 AND 25;
总结
单列索引和联合索引各有优缺点,应根据实际应用场景进行选择。单列索引适用于单一查询、排序的场景,联合索引适用于多条件查询的场景。因此,在表设计时应考虑到数据的读写模式、SQL执行计划等因素,并合理地使用索引以达到优化查询速度的目的。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解MySQL单列索引和联合索引 - Python技术站