0

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

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

感谢任何帮助或建议

4

3 回答 3

2

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

其次,列上的聚集索引对于这个特定的查询来说是理想的,因为它把所有的行都放在磁盘上,并且服务器可以一次抓取它们。问题是,这可能是不可能的,因为您已经有一个可用于其他用途的聚集索引。在这种情况下,请尝试在日期列上使用非聚集索引并查看它的作用。

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

于 2016-04-22T18:08:33.187 回答
1

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

于 2016-04-22T18:52:17.913 回答
0

只要您确定DISTINCT确实需要它,您就无法优化此查询。

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

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

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

于 2016-04-22T19:11:33.367 回答