示例表:
CREATE TABLE Log (
logID int identity
logDate datetime
logText varchar(42)
)
logID已经编入索引,因为它是主键,但如果您要查询此表,则可能需要使用logDate作为约束。但是,logID和logDate的顺序相同,因为logDate总是设置为GETDATE()。
在logDate上放置一个额外的非聚集索引是否有意义,考虑到对于Log表,快速写入很重要。
创建聚簇索引logDate,logID(按此顺序)。随着日期时间“增长”,这不应该花费任何额外费用。 logID可以避免同时插入两个日志条目(可能发生)
如果你有很多查询
WHILE LogDate > ......
(或类似的东西)条款 - 是的,无论如何!
如果按日期选择,LogID上的聚簇索引将无济于事 - 因此,如果这是一个常见操作,则日期上的非聚集索引肯定会有很大帮助。
渣
考虑到logdate,logid上的聚集索引,Arthur很有可能,因为您可能会在日期时间精度(SQL 2005中为3.33ms)的窗口内遇到重复。
我还会提前考虑该表是否会很大并且应该使用表分区来允许日志具有滑动窗口并删除旧数据而无需长时间运行删除语句。这一切都取决于日志记录的数量以及您是否拥有企业版。