小编tba*_*llo的帖子

索引设计:使用 DATE 的聚集索引

每隔一段时间,人们就需要进行一次检查。这就是这样一个时刻。

我有用于报告的表格。它们每天删除/插入一次或每天多次,以始终使用连续的日期范围(例如本月至今或滚动 45 天)从源“刷新数据”。源数据没有 ID 或唯一性。

到目前为止,约定是在日期上使用聚集索引 - 每个表都有一个日期,每个查询都使用一个日期(99% 的时间)。如果表中有一个或多个使其唯一的列,我已将这些列添加到集群中以使其唯一(例如,状态和电子邮件)。如果没有,我添加了一个 ID IDENTITY 以使其唯一。

研究似乎建议“使用递增的 ID”,几乎没有偏差。然而,使用这个约定的性能非常出色——除非我在某个地方遗漏了一些东西。

因此,虽然这很好,但有时同行检查可能是一件好事:)

  • 将日期作为聚集索引中的前导列是否存在任何问题(考虑上述情况)?
  • 添加我自己的 ID 身份列以获得唯一性是否比 MS SQL 为我做的更好?
  • 先加ID,再加日期会不会更好?

环境:Azure SQL

index sql-server clustered-index index-tuning azure-sql-database

5
推荐指数
1
解决办法
926
查看次数

插入时忽略 DATE 约束

我一定是在某个地方遗漏了一些东西..

Azure SQL

DispatchedOn is a DateTime column

ALTER TABLE [table] WITH CHECK ADD CONSTRAINT [CK_ReportDate6MonthRollGreater] CHECK  ((CONVERT([date],[DispatchedOn])>='2022-12-07'))
GO

ALTER TABLE [table] CHECK CONSTRAINT [CK_ReportDate6MonthRollGreater]
GO
Run Code Online (Sandbox Code Playgroud)

我可以插入日期 2022-12-01

在此输入图像描述

sql-server constraint azure-sql-database check-constraints

0
推荐指数
1
解决办法
147
查看次数