首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于综合指数的建议

关于综合指数的建议
EN

Stack Overflow用户
提问于 2012-11-26 23:50:04
回答 1查看 581关注 0票数 4

我有一个巨大的(数百万行)表,其中包含以下列:

代码语言:javascript
复制
[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。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-27 00:11:00

关于把最具选择性的列放在左边的神话是废话-对不起。

仅当使用最左边的n个参数时,复合索引才有用,例如,如果索引位于

代码语言:javascript
复制
(when, who, what)

然后,该索引可以回答询问

代码语言:javascript
复制
(when)

或关于

代码语言:javascript
复制
(when, who)

或者甚至是关于

代码语言:javascript
复制
(when, who, what)

但it 无法回答关于以下内容的问题

代码语言:javascript
复制
(who, what)

(因为这里没有使用最左边的列)。

您应该考虑这一点--以这样一种方式对列进行排序,这样您就可以用这样一个复合索引来回答大多数问题。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13568308

复制
相关文章

相似问题

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