【问题标题】:Oracle SQL Tuning Advisor with changing query具有更改查询的 Oracle SQL Tuning Advisor
【发布时间】:2018-08-24 20:28:29
【问题描述】:

我们有一个 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 配置文件?

【问题讨论】:

    标签: sql oracle query-optimization sql-tuning


    【解决方案1】:

    根据经验,每个查询都是单独优化的。例如,Tuning Advisor 可能建议的索引可能对某些查询非常有用,但最终可能对其他查询毫无用处。堆集群和数据分区也是如此。

    一个简单的解决方案是添加所有查询需要的所有索引。即使可以做到这一点,过多的索引也会减慢所有数据修改 SQL 语句的速度。也就是说,所有INSERTs、UPDATEs 和DELETEs 都会变得缓慢且昂贵。

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

    当然,如果您的表的更新/插入/删除率很高,我会考虑下限。

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

    最后,经验法则只是一个指南。您需要尝试看看快速SELECTs 和快速UPDATEs 之间的最佳平衡点是什么。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-09
      • 2010-10-26
      • 1970-01-01
      相关资源
      最近更新 更多