我应该索引什么

时间:2015-09-21 10:24:44

标签: sql sql-server-2008 indexing

我是一个完整的索引dummie,但我已阅读并观看了很多关于索引的视频,但我似乎无法弄明白。

该表如下所示:

ID          int
ComponentId int
Value       float
TimeStamp   datetime

想象这个数据库有大约200万条记录,我想做类似以下的事情:

SELECT Value
FROM Log 
WHERE ComponentId = X 
AND TimeStamp >= SELECT CONVERT(VARCHAR(8),DATEADD(day, -1, getdate()),112)

这应该可以获得过去24小时内所选组件的所有值

我真的想知道我是否应该在ComponentId,Timestamp或两者

上对此进行索引

提前致谢!

2 个答案:

答案 0 :(得分:2)

您应该使用ComponentId, Timestamp添加复合以及覆盖索引。

create index ix_Log_ComponentId_Timestamp on log(ComponentId, Timestamp) include (value) 

此外,无需在CONVERT(VARCHAR(8),DATEADD(day, -1, getdate()),112)

之前添加选择

答案 1 :(得分:1)

我建议你在桌子上创建covering index,如:

CREATE UNIQUE NONCLUSTERED INDEX IDX_IndexName ON dbo.TableName(ComponentId, TimeStamp) 
INCLUDE(Value)

这可以通过索引搜索提高查询的性能。此外,Value将存储在索引的叶子中,因此您可以删除lookups,因为您选择的数据已经在索引中。