SQL Server:对于3列,“每列一个索引”/“所有索引”之间的区别

时间:2012-03-09 15:00:31

标签: sql-server indexing

我正在SQL Server中配置一个简单的表。它被命名为“LOG”,正如您所料,它用于记录日志,以便以后以各种方式监视/搜索/分组各种应用程序的使用。

表的声明有点像(简单的语法):

LOG {
   user   varchar(8),
   timestamp  datetime,
   appname   varchar(16)
}
primary key(user,timestamp,appname)

我应该在单独的索引中索引每一列吗?三个在同一个指数中? 群集/非群集?

我很高兴看到你在这里应用的逻辑/知识。

1 个答案:

答案 0 :(得分:2)

我建议您使用timestamp聚集索引... since a clustered index is particularly efficient on columns that are often searched for ranges of values,这似乎描述了您将如何查询数据。

此外,我假设timestamp将是顺序的,这将使得插入新数据到聚簇索引中的成本比插入数据的随机分布要便宜。

听起来您不会按userappname进行搜索,因此我不建议您为这些列添加索引,除非您计划加入这些值或在你的where条款在某个地方。

您建议将所有三个字段添加到索引中,但是当您执行此操作时,只有在搜索中包含“前沿”时才会使用索引...

例如,如果您的索引为(user, timestamp, appname),但您只是按timestampappname进行搜索,则不会使用该索引。因此,考虑在创建索引时如何查询数据非常重要。

相关问题