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

时间:2018-02-16 08:27:21

标签: sql-server azure-sql-database

为了确保唯一性,有一个复合PK(聚集)包含:

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

表格中还有两列:

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

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

拥有非群集主键的堆表?另外添加另一个聚集索引?但在什么专栏?没有标识列。

背景:通过Merge语句对此表进行常量插入/更新。表大小约为5000万行

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

1 个答案:

答案 0 :(得分:1)

你的索引大小是58字节,我不会看到这个大小的大问题..

  

通过Merge语句

在此表上有一个常量插入/更新

如果你使用复合键的现有设置(因为56字节不是那么大),更新主键是一个红色标记,因为

1.你可能会看到一些碎片 2.update / delete命令也必须触及非聚簇索引

我会尝试更多选项,因为5000万不是很大

  1. 将此表保留为堆,并添加一个非聚集索引,其中timestamp列为前导列,其余列为查询所需的列。当您将此表保留为堆时,请尝试自己回答following questions看看是否将这个表作为堆帮助你
  2.   
        
    • 您是否需要将此表加入其他表?
    •   
    • 您是否需要一种方法来唯一识别记录?
    •   

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