聚簇索引(Clustered Index)和非聚簇索引(Non-Clustered Index)是数据库索引的两种主要类型,它们在数据存储和访问方式上有显著区别。
聚簇索引
- 数据存储顺序:聚簇索引将数据行按照索引键的顺序进行存储。数据库表中的数据物理顺序与索引顺序相同。
- 数量限制:每个表只能有一个聚簇索引,因为数据只能按照一种顺序进行物理存储。
- 性能:聚簇索引在范围查询和排序操作中性能更高,因为数据已经按索引顺序存储,减少了磁盘I/O操作。
- 存储结构:在B树结构中,叶子节点包含实际数据行。
非聚簇索引
- 数据存储顺序:非聚簇索引将索引键与数据行的指针分开存储。数据行的物理存储顺序与非聚簇索引无关。
- 数量限制:每个表可以有多个非聚簇索引,因为非聚簇索引不会影响数据的物理存储顺序。
- 性能:非聚簇索引在精确查找特定值时性能更好,但在范围查询和排序操作中性能可能不如聚簇索引。
- 存储结构:在B树结构中,叶子节点包含索引键和指向实际数据行的指针。
例子
假设有一个表 Users
,有列 UserId
和 UserName
:
-- 创建聚簇索引
CREATE CLUSTERED INDEX idx_UserId ON Users(UserId);-- 创建非聚簇索引
CREATE NONCLUSTERED INDEX idx_UserName ON Users(UserName);
总结
- 聚簇索引:数据按索引顺序存储,只有一个,适合范围查询。
- 非聚簇索引:索引键和数据分开存储,可以有多个,适合精确查找。
选择哪种索引取决于具体的查询需求和数据访问模式。