1. 聚集索引(Clustered Index)
- 描述:表数据按照索引顺序实际存储。
- 适用场景:数据经常需要排序或范围查询,比如按日期排序的查询。
- 优点:
- 提高排序和范围查询性能。
- 一个表只能有一个聚集索引,但可以在多列上创建(复合索引)。
- 缺点:
- 更新、插入和删除操作可能较慢,因为需要维护数据排序。
2. 非聚集索引(Non-Clustered Index)
- 描述:存储在单独的结构中,包含指向数据行的指针。
- 适用场景:查找特定值或少量结果的查询,如基于唯一键或外键的查询。
- 优点:
- 可以有多个非聚集索引,提高查找特定数据的速度。
- 缺点:
- 可能占用更多存储空间。
- 复杂的查询可能需要访问索引和数据两次(索引查找和行查找)。
3. 唯一索引(Unique Index)
- 描述:确保索引列中的值是唯一的,可以是聚集索引或非聚集索引。
- 适用场景:需要确保数据唯一性的场景,如用户ID、身份证号等。
- 优点:
- 保证数据唯一性。
- 提高查询性能(同非聚集索引)。
- 缺点:
- 插入和更新操作需要检查唯一性,可能稍慢。
4. 筛选索引(Filtered Index)
- 描述:非聚集索引的一种,仅包含满足特定条件的行。
- 适用场景:查询某些条件下的数据,如仅索引活跃用户。
- 优点:
- 索引更小,查询更快。
- 减少索引维护开销。
- 缺点:
- 只适用于特定条件下的查询,不适用于全表扫描。
5. 全文索引(Full-Text Index)
- 描述:用于大文本字段的全文搜索。
- 适用场景:需要对大文本字段进行复杂搜索的场景,如博客搜索。
- 优点:
- 提供高效的全文检索能力。
- 支持自然语言查询。
- 缺点:
- 占用较多存储空间。
- 建立和维护成本较高。
6. 列存储索引(Columnstore Index)
- 描述:适用于数据仓库,通过按列存储数据来提高压缩率和查询性能。
- 适用场景:适用于数据仓库和分析场景,尤其是大规模数据处理。
- 优点:
- 高压缩率。
- 快速的聚合查询性能。
- 缺点:
- 不适合频繁的DML操作(插入、更新、删除)。
总结
- 频繁排序或范围查询:选择聚集索引。
- 查找特定值的查询:选择非聚集索引。
- 确保唯一性和加速查找:选择唯一索引。
- 特定条件下的查询:选择筛选索引。
- 全文搜索:选择全文索引。
- 大规模数据分析:选择列存储索引。
如何使用:
唯一索引
CREATE UNIQUE NONCLUSTERED INDEX UQ_UserId ON YX_USERS (UserId);
删除索引
DROP INDEX UQ_UserId ON YX_USERS;