在关系型数据库中,索引(Index)是为了加快数据检索速度而创建的一种数据结构(通常是 B+ 树)。根据索引中是否决定数据的物理存储顺序,索引可以分为聚集索引(Clustered Index)和非聚集索引(Non-Clustered Index)。
下面从定义、特点、区别和使用场景来详细说明。
聚集索引决定了表中数据的物理存储顺序。
也就是说,表的数据行本身就是按聚集索引的键值排序存储的。
CREATE CLUSTERED INDEX IX_Users_Id
ON Users(Id);
BETWEEN、>、<)效率高非聚集索引不改变数据的物理存储顺序,而是单独维护一个索引结构,其中保存索引键和指向数据行的指针(或聚集索引键)。
CREATE NONCLUSTERED INDEX IX_Users_Name
ON Users(Name);
| 对比项 | 聚集索引 | 非聚集索引 |
|---|---|---|
| 数量 | 只能 1 个 | 可多个 |
| 数据顺序 | 决定物理存储顺序 | 不影响物理存储 |
| 叶子节点 | 整行数据 | 索引键 + 指针 |
| 查询速度 | 快(尤其范围查询) | 稍慢(可能回表) |
| 写入成本 | 较高 | 相对较低 |
如果你使用的是 MySQL / SQL Server / Oracle,我也可以针对具体数据库进一步说明。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。