代码之家  ›  专栏  ›  技术社区  ›  Jimenemex

带更改查询的Oracle SQL优化顾问

  •  1
  • Jimenemex  · 技术社区  · 6 年前

    我们有一个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 回复  |  直到 6 年前
        1
  •  0
  •   The Impaler    6 年前

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

    一个简单的解决方案是添加所有查询所需的所有索引。即使可以这样做,过多的索引也会减慢所有数据修改SQL语句的速度。就是 INSERT UPDATE s、 及 DELETE 这样做会变得缓慢而昂贵。

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

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

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

    最后,经验法则只是一个指南。你需要试着看看快速和快速之间的最佳平衡是什么 SELECT 又快又快 使现代化 s