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

时间:2016-04-22 18:01:00

标签: sql sql-server oracle performance query-tuning

我正致力于调整所有运行缓慢的查询。我是Oracle新手,已经使用sql server一段时间了。有人可以帮助我调整查询以使其运行更快。

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

感谢任何帮助或建议

3 个答案:

答案 0 :(得分:2)

首先,我首先看看为什么DISTINCT存在。根据我的经验,许多开发人员都会使用DISTINCT,因为他们知道他们需要独特的结果,但实际上并不了解他们为什么还没有获得这些结果。

其次,列上的聚簇索引对于此特定查询是理想的,因为它将所有行彼此相邻放在磁盘上,服务器可以立即抓取它们。问题是,这可能是不可能的,因为你已经拥有了一个对其他用途有益的聚集索引。在这种情况下,请在日期列上尝试非聚集索引,看看它的作用。

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

答案 1 :(得分:1)

如果您从VIEW中提取,我还会添加,您应该真正研究视图的设计。它通常有很多连接,可能不是您的查询所必需的。此外,如果需要视图,您可以查看创建索引视图的速度非常快。

答案 2 :(得分:0)

只要您确定真正需要DISTINCT,您就无法做更多优化此查询。

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

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

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