我正在对所有运行缓慢的查询进行性能调整。我是 Oracle 新手,使用 sql server 已经有一段时间了。有人可以帮我调整查询以使其运行得更快。
Select distinct x.a, x.b from
from xyz_view x
where x.date_key between 20101231 AND 20160430
感谢任何帮助或建议
我正在对所有运行缓慢的查询进行性能调整。我是 Oracle 新手,使用 sql server 已经有一段时间了。有人可以帮我调整查询以使其运行得更快。
Select distinct x.a, x.b from
from xyz_view x
where x.date_key between 20101231 AND 20160430
感谢任何帮助或建议
首先,我会先看看为什么DISTINCT
存在。以我的经验,许多开发人员选择这样做是DISTINCT
因为他们知道他们需要独特的结果,但实际上并不理解为什么他们还没有得到这些结果。
其次,列上的聚集索引对于这个特定的查询来说是理想的,因为它把所有的行都放在磁盘上,并且服务器可以一次抓取它们。问题是,这可能是不可能的,因为您已经有一个可用于其他用途的聚集索引。在这种情况下,请尝试在日期列上使用非聚集索引并查看它的作用。
请记住,索引具有广泛的影响,因此使用单个查询来确定索引不是一个好主意。
我还要补充一点,如果您从视图中提取,您应该真正研究视图的设计。它通常有很多查询可能不需要的连接。此外,如果需要视图,您可以考虑创建一个索引视图,它可以非常快。
只要您确定DISTINCT
确实需要它,您就无法优化此查询。
如果阅读未提交的页面不是问题,您可以[NOLOCK]
在子句中添加一个。FROM
但是,您可以分析是否也插入了时间,如果是,是否真的相关,如果不将时间设置为午夜,这将改善索引。
我见过的最大改进是将表中的日期字段分成 3 个字段,每个日期部分 1 个。这确实可以提高性能。