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