我有一个包含两列的日志表。
该表只会插入行,从不更新或删除。
以下是报告的存储过程:
SELECT DocumentType,
COUNT(DocumentType) AS "CountOfDocs"
FROM DocumentTypes
WHERE DateEntered>= @StartDate AND DateEntered<= @EndDate
GROUP BY DocumentType
ORDER BY DocumentType ASC;
将来,用户可能还希望在不同的报告中按文档类型进行过滤。我目前有一个包含两列的非聚集索引。这是创建的正确索引吗?
答案 0 :(得分:1)
日期上的聚集索引,当然。
我认为您的NCI很好。我会说两个都在命名列中,因为我假设您将在查询的WHERE
子句中有日期。我不认为每天最多1000个案例会在加载数据时对插入时间产生重大影响。
答案 1 :(得分:1)
不要添加任何索引。这将是堆表并等待你的“未来你”,任务从这个表中选择一些东西:)。
如果你想索引:
使用堆:在将要过滤的字段上添加索引,如果第二个仅在select(=不在where子句中),则将第二个作为包含列。如果您在两列上都使用两个列put index进行过滤。
如果要添加聚簇索引(例如,在新的自动增量主键列上),只需在col上添加一个索引,或者尝试不添加aditional索引并检查执行计划和效率 - 在大多数情况下是聚集索引与寻求足够。
不要在非唯一列上创建聚簇索引(仅在非常特殊的情况下使用它)。