我有一个巨大的(数百万行)表,其中包含以下列:
[When] datetime2(0),
[What] tinyint,
[Who] bigint它基本上是一个同时发生在不同实体(“谁”)上(“何时”)的事件表(“什么”)。“What”大约有10个不同的值--它是一个枚举。目前,“Who”大约有10,000个值。
我希望能够查询这个表,询问在特定时间内一个或多个实体是否发生了什么事情。例如,在When = '2012-10-01‘到'2012-11-01’之间,What = 0,1,2,3发生在Who = 0,1,2,3上吗?
我正在寻找关于如何最好地索引这个表的建议。我相当肯定综合索引是可行的,但我不确定确切的配置。例如,列的顺序应该是什么?我读到过“最具选择性”的列应该放在左边,我认为在这种情况下应该是什么时候,谁,什么。这是正确的吗?
如果这个问题看起来含糊不清,我很抱歉,但我将非常感谢您的任何意见。我使用的是SQL Server 2012。
发布于 2012-11-27 00:11:00
关于把最具选择性的列放在左边的神话是废话-对不起。
仅当使用最左边的n个参数时,复合索引才有用,例如,如果索引位于
(when, who, what)然后,该索引可以回答询问
(when)或关于
(when, who)或者甚至是关于
(when, who, what)但it 无法回答关于以下内容的问题
(who, what)(因为这里没有使用最左边的列)。
您应该考虑这一点--以这样一种方式对列进行排序,这样您就可以用这样一个复合索引来回答大多数问题。
https://stackoverflow.com/questions/13568308
复制相似问题