【发布时间】:2021-07-08 13:53:46
【问题描述】:
我计划实施以下历史记录表,但我想知道什么会提供最佳性能。我将有一个 USP 在第 N 天从 hID X 获取所有记录(它将始终选择给定日期的所有可用记录)。记录将每 15 分钟分组一次,“值”将是 hID 执行某项操作的次数。
拥有一个带有索引的 DateTime 列会更快,还是将其拆分为一个 INT 并将其保存为 YYYYmmdd 和单独的时间列会更好? 如果我选择最后一个选项,我必须在后端将其转换回 DateTime,因为应用程序需要 DateTime 来显示数据。
表 A
- Id (PK int)
- hId (FK int) FK 到具有完整键的表(最长 300 个字符)
- 日期(日期时间) -值(整数)
- 计数(整数)
上表每天将获得大约 2.000.000 条新记录(对于当前的用户数量,以后可能会增加),并且最多只能保留 7 天的记录。之后,USP 将删除它们。
表 B(现有表)
- ID(整数)
- 密钥(nvarchar 300)
【问题讨论】:
-
数据库是什么?
-
“会不会更快...”——这完全取决于您要优化的特定查询。请将其添加到问题中。
-
抱歉,刚刚添加了正确的标签。
-
您对某个时间感兴趣吗?如果不使用
date数据类型。无论哪种方式,datetime或date列上的索引都可以,不要将日期存储为整数,您会失去很多功能而没有任何好处。
标签: sql-server tsql datetime indexing query-optimization