首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Server索引设计

Server索引设计
EN

Stack Overflow用户
提问于 2014-10-02 16:36:25
回答 1查看 84关注 0票数 1

我有一个表,其中保存了一段时间以来发生的事件的历史,例如:

代码语言:javascript
复制
EventType | OccurredOn       | Other.. | Data..
--------------------------------------------
1         | 2014/10/02 09:00 | foo     | bar
1         | 2014/10/02 10:00 | foo     | bar
2         | 2014/10/03 09:00 | foo     | bar
1         | 2014/10/04 09:00 | foo     | bar
3         | 2014/10/05 09:00 | foo     | bar
2         | 2014/10/05 09:00 | foo     | bar
4         | 2014/10/05 09:00 | foo     | bar

我在这个表上的所有查询都是如下形式的:

代码语言:javascript
复制
select [OccurredOn], [OtherData]
from [Data]
where [EventType] = @type and [OccurredOn] between @start and @end

也许,使用grouping和选择聚合数据。

行几乎总是按时间顺序插入,当它们被按时间顺序插入时,OccurredOn应该是合理的“最近的”--也就是说,在“最新”行已经插入之前不太远。

如何对此表进行索引以进行有效的选择?

想必我的PK应该是集群的,并且包括OccurredOn它,但是没有自然唯一的键,所以我大概也需要一个autoincrement int列吗?

更新

就行而言,该表将有数百万,可能有10/百万。

我使用的是Server 208R2

EN

回答 1

Stack Overflow用户

发布于 2016-09-15 20:57:35

第一件事- OccurredOn时间可以有重复的值。

从下面开始,分析执行计划,以便稍后对其进行调整。

我建议添加一个代理/代理密钥,这是一个自动累进标识列-让我们将它命名为"NewColumn“。将这个"NewColumn“保留为Primary Key。将主键保持为Non-Clustered

使用列(OccurredOn,NewColumn)创建一个OccurredOn。此聚集索引有助于搜索日期范围。

在聚集索引上保留"OccurredOn“有助于保持聚集索引不断增加的顺序。

保持NewColumn与OccurredOn一起,有助于使聚集索引具有唯一性。这有助于避免Server自行添加统一器(在非唯一聚集索引的情况下)。

参考资料

  1. Is it needed to add additional column to make this clustered index unique?
  2. Clustered index on random order column
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26165373

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档