如何对具有 Between 语句的日期范围进行性能优化



我正在努力调整所有运行缓慢的查询的性能。 我是甲骨文的新手,已经使用sql服务器一段时间了。有人可以帮我调整查询以使其运行得更快。

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

感谢任何帮助或建议

首先

,我首先看看为什么DISTINCT在那里。根据我的经验,许多开发人员之所以选择DISTINCT,是因为他们知道他们需要独特的结果,但实际上并不明白为什么他们还没有获得这些结果。

其次,列上的聚集索引是此特定查询的理想选择,因为它将所有行放在磁盘上彼此相邻,服务器可以一次获取所有行。问题是,这可能是不可能的,因为您已经有一个适合其他用途的聚集索引。在这种情况下,请尝试在日期列上使用非聚集索引,看看它的作用。

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

我还要补充一点,如果你是从视图中提取的,你应该真正调查视图的设计。 它通常具有许多联接,这些联接对于查询可能不是必需的。 此外,如果需要视图,可以考虑创建索引视图,这可以非常快。

只要您确定确实需要DISTINCT,就无法执行更多操作来优化此查询。

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

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

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

相关内容

  • 没有找到相关文章

最新更新