sql-server - 聚集键在 SQL Server 中使用非聚集索引上升到树
问题描述
似乎在 2019 版之前的 SQL Server 中,集群键/键上升到不具有唯一非聚集索引的树结构。使用更大和多个集群键/键,您可以获得更宽更高的树,这会花费您更多的存储大小和内存大小。
因此,我们曾经与PK
聚集键分开我的问题是
- SQL Server 2019 和 Azure 在非聚集索引方面是否发生了变化?
- 堆根本没有聚类键/键,堆中的索引方式是什么?
解决方案
SQL Server 2019 和 Azure 是否更改了非聚集索引
这种行为比本网站上的许多人都早。
因此,我们曾经将 PK 与集群分开
这是几乎总是不必要的微优化。
堆根本没有聚类键/键,堆中的索引方式是什么
非聚集非唯一索引始终将行定位器作为索引键。对于堆,行定位符是 ROWID (FileNo,PageNo,SlotNo)。
如果要将行从宽 PK 的叶级别移出,通常适用于非常大的表。因此,将行移动到聚集的列存储索引可能是一个不错的选择。为此,只需删除集群 PK(这会将叶级别保留为堆),创建 CCI,然后将 PK 重新创建为非集群 PK。例如
drop table if exists t
go
create table t(id int not null, a int, b int)
alter table t
add constraint pk_t
primary key clustered(id)
go
alter table t drop constraint pk_t
create clustered columnstore index cci_t on t
alter table t
add constraint pk_t
primary key nonclustered (id)
如果您有其他非聚集索引,请先删除它们,如果您确实需要,仅在后面重新创建它们。IE 唯一索引、支持外键的索引或索引需要支持特定的查询。CCI 通常不需要大量索引,因为它的扫描效率很高。
推荐阅读
- excel - 如何输入相同的值来代替 Vlookup `#N/A`
- javascript - 在 Promise.all 中使用 Axios 发出请求
- python-3.x - 'int' 对象不可下标,试图将 2d 列表转换为 tkinter 画布,这是我得到的错误
- r - 叠加 ggmap 和 ggplot
- typescript - 在构建的 vue3/vite 应用程序中访问当前模块名称
- javascript - JWT 提供者错误:期望它返回带有 Angular 的 Promise Tinymce
- jquery - 修改给定的正则表达式以检查字符串是否不包含电话号码
- azure-api-management - 部署 Azure 应用服务/API 时出现问题
- sql - oracle sql中的最大日期删除和最后业务日期
- flutter - 如何在 Flutter 中将 unix 时间戳转换为 iso 8601