【发布时间】:2012-11-14 03:12:59
【问题描述】:
我有一个巨大的(数百万行)表,其中包含以下列:
[When] datetime2(0),
[What] tinyint,
[Who] bigint
它基本上是一个事件表(“什么”),一次发生在不同的实体(“谁”)(“何时”)。 'What' 有大约 10 个不同的值——它是一个枚举。目前“谁”有大约 10,000 个值。
我希望能够查询此表,以询问某个时间之间一个或多个实体是否发生了什么事情。例如,[What = 0, 1, 2, 3] 在 [When = '2012-10-01' 到 '2012-11-01'] 之间是否发生在 [Who = 0, 1, 2, 3] 上。
我正在寻找有关如何最好地索引此表的建议。我相当确定复合索引是要走的路,但我不确定确切的配置。例如,列顺序应该是什么?我已经读过“最具选择性”的列应该放在左边,我认为在这种情况下应该是 [When]、[Who]、[What]。这是正确的吗?
很抱歉,如果这个问题看起来含糊不清,但我将不胜感激。我正在使用 SQL Server 2012。
【问题讨论】:
-
向我们展示您拥有的索引。然后运行几个查询并查看执行计划。
-
这还取决于您在典型日期范围内会发生多少事件。
标签: sql-server tsql indexing sql-server-2012 composite-index