如何对具有日期范围 Between 语句的查询进行性能调整

How to Performance tune a query that has Between statement for range of dates

我正在对所有缓慢的 运行ning 查询进行性能调优。我是 Oracle 的新手,已经使用 sql 服务器一段时间了。有人可以帮助我调整查询以使其 运行 更快。

Select distinct x.a,  x.b from 
from xyz_view x 
where x.date_key between 20101231 AND 20160430

感谢任何帮助或建议

首先,我首先要了解 DISTINCT 存在的原因。以我的经验,许多开发人员都选择了 DISTINCT,因为他们知道他们需要独特的结果,但实际上并不理解为什么他们还没有得到它们。

其次,列上的聚集索引对于此特定查询是理想的,因为它将所有行放在磁盘上并排放置,服务器可以抓取他们一次。问题是,这可能是不可能的,因为您已经有一个适合其他用途的聚簇索引。在这种情况下,尝试在日期列上使用非聚集索引,看看会发生什么。

请记住,索引具有广泛的影响,因此使用单个查询来确定索引并不是一个好主意。

我还要补充一点,如果您是从 VIEW 中提取数据,您应该真正研究视图的设计。它通常有很多您的查询可能不需要的联接。此外,如果需要视图,您可以查看创建索引视图,它可以非常快。

只要确定确实需要 DISTINCT,您就可以优化此查询。

如果读取未提交的页面不是问题,您可以将 [NOLOCK] 添加到 FROM 子句。

但是您可以分析时间是否也被插入,如果是,它是否真的相关,如果不将时间设置为午夜,这将改善索引。

我看到的最大改进是将 table 中的日期字段划分为 3 个字段,每个日期部分 1 个。这确实可以提高性能。