我正在努力调整所有运行缓慢的查询的性能。 我是甲骨文的新手,已经使用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 个。这确实可以提高性能。