Bar*_*ast 4 t-sql sql-server indexing composite-index sql-server-2012
我有一个巨大的(数百万行)表,其中包含以下列:
[When] datetime2(0),
[What] tinyint,
[Who] bigint
Run Code Online (Sandbox Code Playgroud)
它基本上是事件表("什么")在某时刻发生在各种实体("谁")("当")."什么"有大约10个不同的值 - 它是枚举.目前"谁"有大约10,000个值.
我希望能够查询此表,询问某个时间之间某个实体是否发生了某些事情.例如,在[When ='2012-10-01'到'2012-11-01']之间,[Who = 0,1,2,3]发生[What = 0,1,2,3].
我正在寻找有关如何最好地索引此表的建议.我很确定复合索引是可行的方法,但我不确定确切的配置.例如,列顺序应该是什么?我读过的"最有选择性的"列应该向左走,我认为在这种情况下,将[在],[谁],[什么.它是否正确?
对不起,如果这个问题看起来很模糊,但我很感激任何意见.我正在使用SQL Server 2012.
关于将最具选择性的列放在左边的神话是废话 - 对不起.
只有使用n个最左边的参数时,您的复合索引才有用,例如,如果您有索引
(when, who, what)
Run Code Online (Sandbox Code Playgroud)
那个索引可以回答问题
(when)
Run Code Online (Sandbox Code Playgroud)
或者约
(when, who)
Run Code Online (Sandbox Code Playgroud)
甚至是
(when, who, what)
Run Code Online (Sandbox Code Playgroud)
但它不能回答有关
(who, what)
Run Code Online (Sandbox Code Playgroud)
(因为这里没有使用最左边的列).
这应该是您考虑的一点 - 以这样的方式对列进行排序,以便您可以使用这样的复合索引回答大部分问题.
| 归档时间: |
|
| 查看次数: |
576 次 |
| 最近记录: |