1. 什么是组合索引?
组合索引,也被称为复合索引或者覆盖索引,是由多个列组成的索引。这样的索引并不是仅仅在一个列上建立索引,而是同时在多个列上建立索引。
在 SQL Server 中,可以通过 CREATE INDEX 语句来创建一个组合索引,例:
CREATE INDEX idx_name ON TableName (col1, col2, col3);
2. 为什么使用组合索引?
组合索引的主要作用就是提升 SQL 查询的效率,尤其是对查询条件中包含多个列的时候。相对于单列索引,组合索引可以更好地覆盖查询条件。
同时,组合索引还可以减少数据库的 I/O 操作,因为查询只需要读取少数列,而不是整个表的所有列。
3. 如何选择组合索引的列及顺序?
3.1 列的选择
选择组合索引的列时,应该优先选择那些最常用于查询的列。只有那些经常被查询的列才应该被包含在索引中。
例如:如果你有一个学生信息表,常用于查询的可能是学生姓名、出生日期或者性别等信息,那么应该优先选择这三列中的至少两列来创建索引。
3.2 列的顺序
除了选择什么列之外,还需要注意选择列的顺序。选择顺序的原则是把
最具选择性的列放在最左边
最具选择性的列指的是读取该列中某个值的记录数量相较于整个表记录数量的占比。一般来说,占比越小的列选择性就越大。
例如:如果在一个学生信息表中,只有 10% 的学生是女生,那么性别这一列的选择性就相对较高。如果你经常需要查询女生的信息,那么可以将性别这一列放在最左边。
限制条件最多的列放在最左边
假设你需要查询出学生信息表中成绩在 A 范围内的男生姓名,那么限制条件最多应该包含性别和成绩,因此性别这一列应该放在最左边,成绩这一列放在第二位。
4. 组合索引的注意事项
(1)索引列的顺序很重要
(2)索引列会占用更多的磁盘空间
(3)不要为了建立索引而过度设计表结构
(4)多个单列索引不能取代组合索引
应该根据自己的实际情况来选择是否使用组合索引。