繁体   English   中英

复合聚集索引作为主键与SQL Server中的堆表

[英]Composite clustered index as primary key vs heap table in SQL Server

为确保唯一性,有一个复合PK(集群),其中包含:

[timestamp] [datetime2]
[userId] [varchar](36) 
[cost_type] [varchar](20) 

表格中还有两列:

[cost_cent] [bigint] NULL
[consumption_cent] [bigint] NULL

复合群集主键不是理想的(包括varchar),但是替代方法是什么?

是否有一个具有非集群主键的堆表? 另外添加另一个聚集索引吗? 但是在哪一列呢? 没有标识列。

背景:通过Merge语句对该表进行不间断的插入/更新。 表大小约为5000万行

查询将主要使用时间范围内的PK。

您的索引大小为58个字节,我认为此大小没有什么大问题。

通过Merge语句对该表进行不间断的插入/更新

如果您使用现有的复合键设置(因为56个字节不是那么大),则更新主键是一个危险信号,因为

1.您可能会看到一些碎片
2.更新/删除命令还必须触摸非聚集索引

我会尝试更多的选择,因为5000万的选择并不多

  1. 将此表保留为堆,并添加一个非聚集索引,其中时间戳列为前导列,而查询所需的其余列作为包含列。当您将该表保留为堆时,请尝试自己回答以下问题以查看是否保留该表作为堆可以帮助您
  • 您是否需要将此表加入其他表?
  • 您需要一种唯一标识记录的方法吗?

2.我还将尝试添加一个标识列并将其作为主键。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM