SQL Server:非聚簇日期索引

时间:2018-06-11 10:37:24

标签: sql sql-server

我想通过在LogDate(DateTime)列上添加非聚集索引来优化我的Logs表的性能,以提高性能,因为我的大多数查询都包含一个时间范围(From Date - To Date)。线程波纹管建议舍入到最接近的小时。

How to improve performance for datetime filtering in SQL Server?

我正在寻找一个最佳实践示例&建议使用datetime列的索引来提高性能。

提前致谢

1 个答案:

答案 0 :(得分:1)

您的问题中引用的答案是错误的或遗漏了一些关键细节。添加带有舍入值的其他datetime列不会减小索引大小。无论存储的值如何,datetime数据类型都是固定的8个字节。要实现减小的索引大小,需要使用不同的数据类型,例如smalldatetime(只有4个字节,分辨率不超过一分钟)和/或使用数据压缩。

如果查询通常仅指定日期时间范围,则聚簇索引应位于datetime列上。我在野外看到的一个常见的反模式是一个聚集的标识列主键,它没有用处。日志表是表应具有主键的一般规则的一个例外,因为它们不是关系的。

如果它们具有相当的选择性,您可能还需要在频繁指定的其他列上使用非聚集索引,但应谨慎使用,以避免影响插入性能。考虑使用datetime2以及所需的最大精度,可能每行保存一个字节或2个字节。还要考虑表和索引的页面压缩。我已经将这种方法用于数十亿行的日志表,并实现了出色的性能。