更改查询的Oracle SQL Tuning Advisor

时间:2018-08-24 20:28:29

标签: sql oracle query-optimization sql-tuning

我们有一个C#应用程序,它将在数据库中搜索几个表中的活动。用户可以指定搜索某些条件,这些条件又基于基本的SQL查询。

此查询需要很长时间才能执行,我们想在此查询上使用Oracle的Tuning Advisor。我们的问题是该调优顾问是否仅适用于给定的查询?

例如,如果我们对应用程序进行基础查询的调整(它们不指定任何搜索条件):

SELECT Actv, FullName, DOB FROM Pers;

创建的SQL配置文件仅适用于该语句吗?如果他们指定搜索条件,从而使语句增长为:

SELECT Actv, FullName, DOB FROM Pers WHERE Actv = 'Foo' AND DOB >= :Date;

我们是否需要为此查询创建另一个SQL配置文件,或者优化器在创建执行计划时会使用基线SQL配置文件的一部分?

1 个答案:

答案 0 :(得分:0)

根据经验,每个查询都是单独优化的。例如,Tuning Advisor可能建议的索引对于某些查询可能很好,但对于其他查询可能最终没有用。关于堆群集和数据分区也可以这么说。

一个幼稚的解决方案是添加所有查询所需的所有索引。即使可以做到这一点,索引过多也会减慢所有数据修改SQL语句的速度。也就是说,所有INSERTUPDATEDELETE都将变得缓慢而昂贵。

那么,您应该怎么办?这取决于您的具体情况。我的[非常个人]经验法则是,每个表的索引不得超过10个。

当然,如果您的表具有较高的更新/插入/删除率,我会考虑使用较低的限制。

另一方面,如果表数据的修改率很低/没有修改(主要是只读表),则可以提高此限制,甚至可以按照Tuning Advisor的建议添加尽可能多的索引。

最后,经验法则只是一个指导。您将需要尝试查看快速SELECT和快速UPDATE之间的最佳平衡。