快捷搜索:  as  test  1111  test aNd 8=8  test++aNd+8=8  as++aNd+8=8  as aNd 8=8

网赌新浦金可靠吗:Oracle中的优化器如何进行评估优化(1)Oracle优化



Oracle优化器在任何可能的时刻都邑对表达式进行评估,并且把特定的语法布局转换成等价的布局,这么做的缘故原由是:

·要么结果表达式能够比源表达式具有更快的速率。

·要么源表达式只是结果表达式的一个等价语义布局。

不合的SQL布局无意偶尔具有同样的操作(例如:= ANY (subquery) and IN (subquery)),Oracle会把他们映射到一个单一的语义布局。

下面将评论争论优化器若何评估优化如下的环境和表达式:

常量 LIKE 操作符 IN 操作符 ANY和SOME 操作符 ALL 操作符 BETWEEN 操作符 NOT 操作符

通报(Transitivity) 确定性(DETERMINISTIC)函数

常量

常量的谋略是在语句被优化时一次性完成,而不是在每次履行时。下面是检索月薪大年夜于2000的的表达式:  &middo网赌新浦金可靠吗t; sal > 24000/12

· sal > 2000

· sal*12 > 24000

假如SQL语句包括第一种环境,优化器会简单地把它改变成第二种。

留意:优化器不会简化超过对照符的表达式,例如第三条语句,鉴于此,利用法度榜样开拓者应该只管即便写用常量跟字段对照检索的表达式,而不要将字段置于表达式傍边。

LIKE 操作符

优化器把应用LIKE操作符和一个没有通配符的表达式组成的检索表达式转换为一个“=”操作网赌新浦金可靠吗符表达式。

例如:优化器会把表达式ename LIKE 'SMITH'转换为ename = 'SMITH'优化器只能转换涉及到可变网赌新浦金可靠吗长数据类型的表达式,前一个例子中,假如ENAME字段的类型是CHAR(10), 那么优化器将不做任何转换。

IN 操作符

优化器把应用IN对照符的检索表达式调换为等价的应用“=”和“OR”操作符的检索表达式。例如,优化器会把表达式ename IN ('SMITH','KING','JONES')调换为:  ename = 'SMITH' OR ename = 'KING' OR ename = 'JONES'

ANY和SOME 操作符

优化器将跟随(following)值列表的ANY和SOME检索前提用等价的一致操作符和“OR网赌新浦金可靠吗”组成的表达式调换。

例如,优化器将如下所示的第一条语句用第二条语句调换:  · sal > ANY (:first_sal, :second_sal)

· sal > :first_sal OR sal > :second_sal

优化器将跟随子查询的ANY和SOME检索前提转换成由“EXISTS”和一个响应的子查询组成的检索表达式。

例如,优化器将如下所示的第一条语句用第二条语句调换:  · x > ANY (SELECT sal FROM emp WHERE job = 'ANALYST')

&网赌新浦金可靠吗middot; EXISTS (SELECT sal FROM emp WHERE job = 'ANALYST' AND x > sal)

ALL 操作符

优化器将跟随值列表的ALL操作符用等价的“=”和“AND”组成的表达式调换。

例如,sal > ALL (:first_sal, :second_sal)表达式会被调换为:  sal > :first_sal AND sal > :second_sal

对付跟随子查询的ALL表达式,优化器用ANY和别的一个相宜的对照符组成的表达式调换。例如,优化器会把表达式 x > ALL (SELECT sal FROM emp WHERE deptno = 10) 调换为:  NOT (x

接下来优化器会把第二个表达式适用ANY表达式的转换规则转换为下面的表达式:  NOT EXISTS (SELECT sal FROM emp WHERE deptno = 10 AND x

BETWEEN 操作符

优化器老是用“>=”和“= 2000 AND sal <= 3000来代替。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

您可能还会对下面的文章感兴趣: