我们使用的是Oracle 11,最近我购买了Dell SQL Optimizer(Xpert
Toad软件包随附)。今天早上,我们有一条声明要花比正常运行更长的时间,而在最终使它运行(创建时缺少某些条件)之后,我很好奇,以前从未使用过任何SQL优化器,它将更改为。它返回了同一条语句的150多种变体,但成本最低的语句仅添加到了以下行中。
AND o.curdate > 0 + UID * 0
我们已经有o.curdate> 0,并添加了“ + UID * 0”。这将运行时间从一分钟以上减少到了3秒。我以为它与Oracle如何转换和处理条件有关,但是我很好奇是否有任何Oracle专家可以提供一些见解,使这种大于零的检查如何将运行时间减少15倍。
。谢谢!
UID * 0用于对优化器隐藏0。优化器将使用其统计数据来确定使用索引扫描是否o.curdate > 0
有意义。只要优化器知道其中的值,o.curdate > value
它就会这样做。但是,当值未知时(此处是因为将在执行时调用函数UID并以某种方式将其数学化为值),优化器无法预见可以访问的行百分比,因此选择了平均最佳访问方法。
示例:您有一个ID为1到100的表。询问ID> 0将导致全表扫描,而询问ID> 99则可能导致索引范围扫描。当请求ID> 0 + UID * 0时,会使优化器对该值视而不见,它可能选择索引计划而不是全表扫描。
问题内容: 有没有可用的文章/链接,可以在其中找到SQL调优(Oracle)的示例。如果用示例进行解释,那就太好了。我需要类似现有查询,统计信息,计划的内容,然后需要建议的查询/建议和新计划。 我在Google上找到了几个非常好的链接: http://www.dba-oracle.com/art_sql_tune.htm http://www.orafaq.com/tuningguide/ 但是,
问题内容: 我在Oracle SQL中有一张表,其ID的顺序是递增的,但是由于编辑的原因,ID中存在间隙,例如,ID当前类似于 22 23 24 32 33 44 …等等 我想通过遍历表中的每一行并更新它们来解决这些差距,因此没有差距。最好的方法是什么? 问题答案: 我认为以下将在Oracle中起作用: 上面的答案很久以前就被接受了。它不起作用。我认为答案应该包含有效的代码,因此:
本文向大家介绍Oracle DBMS中的PL / SQL块,包括了Oracle DBMS中的PL / SQL块的使用技巧和注意事项,需要的朋友参考一下 PL / SQL是一种块结构语言,即PL./SQL的代码以块的形式编写。PL / SQL还包含Oracle数据库的健壮性,安全性和可移植性。 PL / SQL的每个块均包含以下子部分- 声明- 本节包含所有需要在程序之前声明的项目,例如变量,子程序
问题内容: 查看数据库中的V $ SQL,我刚发现一个奇怪的查询,看起来像: 有人知道语法@!的含义吗? 我以前从未在Oracle中见过类似的东西 谢谢 问题答案: 这是源自远程数据库的查询。使用@DB_NAME语法在远程数据库上的查询中引用了您在V $ SQL中看到此查询的数据库 远程数据库已将查询推送到您的数据库中以便执行,但是要回答该查询,您的数据库需要从远程数据库中拉回一些信息。这是@!进
问题内容: 此查询需要153秒才能运行。中有数百万行。 我认为查询要花很长时间,因为where子句中的功能。但是,我需要在列上执行ltrim rtrim,而且日期也必须在格式上匹配。如何优化此查询? 说明计划: 首要的关键: 索引: 但是,在解释计划中,我看不到使用索引/主键。那是问题吗? 问题答案: 试试这个: 如果尚无时间,请从其外观(出生日期?)上删除该对象。除此之外,您还需要一些索引工作。
本篇章主要介绍 Oracle 优化方面的相关内容,包括查询、存储效率优化、Oracle 性能优化、Oracle 计划等内容。