【问题标题】:Adding a Primary Key and Altering a Column to DatetTime2添加主键并将列更改为 Datetime2
【发布时间】:2013-11-18 21:00:31
【问题描述】:

我有一个表格,用于跟踪特定文件在我们的系统检查时所经历的状态。它看起来像这样:
FileID 整数
状态 tinyint
TouchedBy varchar(50)
TouchedWhen 日期时间

目前该表上没有主键,但是 Status 和 TouchedWhen 上有一个聚集索引

随着表的持续增长和查询性能的下降,我的一个想法是添加一个 PrimaryKey 以便我摆脱堆查找 - FileID、Status 和 TouchedWhen 上的主键

我遇到的问题是 TouchedWhen,由于它的舍入问题,有时会有 2 个日期时间完全相同的条目。

然后我开始研究如何将其转换为 datetime2(7) 并更改当时重复的那些。我的桌子看起来像:
FileID 整数
状态 tinyint
TouchedBy varchar(50)
TouchedWhen datetime2(7)

还有一个关于 FileID、Status 和 TouchedWhen 的主键

我的问题是——如果有重复,最好的方法是通过什么来为现有表添加毫秒?如何对需要保持在线的表执行此操作?

提前,谢谢,
布伦特

【问题讨论】:

    标签: sql sql-server composite-primary-key data-conversion datetime2


    【解决方案1】:

    您不需要添加主键来加快查询速度 - 只需在 FileID, Status, TouchedWhen 上添加索引与添加主键对性能的影响一样大。定义主键的主要好处是记录身份和参照完整性,这可以通过自增主键来实现。

    (我不是说您不应该有主键,我是说主键的性能影响在于索引本身,而不是事实上它是一个主键)

    另一方面,将您的聚集索引更改为包含FileID可能会产生更大的影响,因为使用这些列的查找不需要搜索索引然后查找数据 - 数据页面将与索引值一起出现。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-25
      • 2018-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多