`
caijingbin0207
  • 浏览: 107040 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Oracle数据库中的Where条件执行顺序是从后往前

阅读更多

Oracle数据库中的Where条件执行顺序是从后往前的

转自:http://www.cnblogs.com/yuanjw/archive/2010/03/04/1678093.html

 

先看下面的一小段代码

 

ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前,

那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾.

例如:   

(低效)   

 SELECT    

 FROM EMP E    

 WHERE        

    SAL >50000    

 AND JOB = ‘MANAGER’    

 AND25< (SELECTCOUNT(*) FROM EMP WHERE MGR=E.EMPNO);   

(高效)   

 SELECT    

 FROM EMP E    

 WHERE        

     25< (SELECTCOUNT(*) FROM EMP WHERE MGR=E.EMPNO)    

 AND SAL >50000    

 AND JOB = ‘MANAGER’;

 

 

举例说明:

 

  

 

UPDATE XCSV_TEXT A SET ID05 = (
   
SELECT (COUNT(DISTINCT ID05) +1)

    FROM XCSV_TEXT B

    WHERE

        B.ID04 IN ('MD','RT')

    AND TO_NUMBER(B.ID05) < TO_NUMBER(A.ID05)

)

WHERE A.ID04 IN ('MD','RT');

 

 

如果用这句代码来操作上面表中的数据,那么将会报错.

根据OracleWhere条件的执行顺序,将会先执行TO_NUMBER(B.ID05) < TO_NUMBER(A.ID05)这一段, “Ver000017b65b65242dde1a9a014ac0e525ffb60”是不能To_Number.

而改成

 

UPDATE XCSV_TEXT A SET ID05 = (
   
SELECT (COUNT(DISTINCT ID05) +1)
    FROM XCSV_TEXT B
    WHERE
        TO_NUMBER(B.ID05)
< TO_NUMBER(A.ID05)
    AND B.ID04 IN ('MD','RT')

)

WHERE A.ID04 IN ('MD','RT');

 

就正常了,而且提高了执行效率(至于为什么提高了执行效率,不做讨论.).

 

 结论:

       ORACLE采用自下而上的顺序解析WHERE子句,编写Where条件需要注意顺序,为了避免不必要的错误,也为了提高执行效率!

转自:http://www.cnblogs.com/yuanjw/archive/2010/03/04/1678093.html

 

分享到:
评论

相关推荐

    oracle数据库表中修改字段的顺序

    ### Oracle数据库表中修改字段顺序的方法 在Oracle数据库中,我们常常会遇到需要调整表中字段顺序的情况。例如,为了优化查询效率或是更好地符合业务逻辑,我们可能希望更改某些字段的位置。在过去,如果想要改变一...

    Oracle数据库表中字段顺序的修改方法

    本文将详细介绍如何在Oracle数据库中修改表字段的顺序。 首先,让我们看看如何在Oracle中新增字段。新增字段的基本语法是: ```sql alter table tablename add (column datatype [default value][null/not null],…...

    东北石油大学Oracle数据库期末复习资料

    Oracle数据库核心考点是数据库管理系统中非常重要的知识点,本文将从多方面详细讲解Oracle数据库的相关知识点,为读者提供了一个系统的知识框架。 一、SQL*Plus命令 SQL*Plus是一个强大的命令行工具,用于访问和...

    更改Oracle表中字段的顺序的终极方法

    在Oracle数据库管理中,有时我们可能需要对表中的字段顺序进行调整。然而,通常的做法是通过备份、删除原表并重建来达到这一目的,这种方法不仅耗时而且繁琐。幸运的是,经过一番研究与探索后发现,实际上有一种更加...

    oracle数据库开发面试必备

    ### Oracle数据库开发面试必备知识点详解 #### 一、Oracle SQL查询优化 ...以上内容涵盖了Oracle数据库开发过程中的一些常见知识点,希望能帮助你在面试中更加自信,并在实际工作中应用这些知识来优化数据库性能。

    Oracle数据库SQL优化总结

    2. **WHERE子句中的连接顺序**:从下往上解析WHERE子句,将能够过滤最多记录的条件放在最后,这样可以减少处理的数据量。 3. **避免在SELECT中使用通配符'*'**:使用具体的列名代替'*',以减少解析时间和内存消耗。...

    Oracle数据库关于SQL的执行计划

    ### Oracle数据库关于SQL的执行计划 #### 1. Oracle 的 Optimizer 及其相关知识 在 Oracle 数据库中,执行 SQL 查询之前会先生成一个执行计划(Execution Plan),该计划由 Oracle 的优化器(Optimizer)根据一...

    oracle数据库优化大全(面试和学习都适用)

    本文总结了 30 多条 Oracle 数据库优化的经验,涵盖了选择最有效率的表名顺序、WHERE 子句中的连接顺序、SELECT 子句中避免使用 ‘*‘、减少访问数据库的次数、使用 DECODE 函数来减少处理时间、整合简单、无关联的...

    Oracle数据库导出文本的方法

    Oracle 数据库导出文本的方法是 Oracle 数据库的入门级应用,旨在介绍如何将 Oracle 数据库中的数据导出到文本文件中。在实际应用中,我们经常需要将查询结果导出到文本文件中,以便于后续处理或分析。下面我们将...

    Oracle数据库讲义.pdf

    ### Oracle数据库学习知识点详解 #### 一、Oracle数据库概述 - **Oracle数据库10g**:本书主要基于Oracle 10g版本编写,虽然技术在不断进步,但Oracle数据库的核心概念和技术仍然保持一致,适用于其他版本的学习。 ...

    Oracle数据库介绍-2008-12-12及介绍Oracle常见的问题

    1. **表空间(Tablespace)**:表空间是Oracle数据库中的逻辑存储单元,用于组织和管理数据文件。一个数据库可以包含多个表空间,而每个表空间由一个或多个数据文件组成。 - **系统表空间(System Tablespace)**:默认...

    SQL语句执行顺序说明

    ### SQL语句执行顺序说明 #### 一、SQL语句准备执行阶段 当SQL语句进入Oracle的库缓存后,为了确保其...通过遵循上述步骤和技巧,可以有效地提高SQL语句在Oracle数据库中的执行效率,从而提升应用程序的整体性能。

    Oracle 数据库优化技术手册.pdf

    在编写SQL语句时,应尽量按照自下而上的顺序来编写WHERE子句中的连接条件,并将能够过滤掉最多记录的条件放在末尾。在SELECT子句中,避免使用‘*’,而应该明确列出需要查询的列,这样可以减少数据库解析SQL语句时的...

    oracle数据库性能优化宝典

    14. **用WHERE子句替换HAVING子句**:在能的情况下,将过滤条件移到WHERE子句中,以避免在GROUP BY后的HAVING子句中处理,因为HAVING通常会带来额外的计算成本。 15. **减少对表的查询**:通过缓存、物化视图、汇总...

    oracle数据库优化PPT

    此外,编写高效的WHERE子句也是关键,比如通过调整条件顺序,可以显著影响查询速度。 另外,避免不必要的GROUP BY操作,因为GROUP BY通常伴随着较高的计算代价,只有在确实需要聚合数据时才应使用。同时,注意优化...

    Oracle数据库中分页查询介绍

    在Oracle数据库中,分页查询是一项关键功能,尤其在构建高效的数据检索系统,如自定义搜索引擎时,确保用户能够分批浏览大量数据。由于Web应用的无状态特性,每个请求都是独立的,维持数据库游标以供后续请求是低效...

    Oracle数据库死锁查询语句

    Oracle数据库死锁是数据库系统中常见的问题,它发生在两个或多个事务在执行过程中,因争夺资源而造成的一种相互等待的现象。当这种情况发生时,如果没有外力干预,这些事务都将无法继续执行,形成一种僵局。了解如何...

    Oracle数据库性能优化浅析.pdf

    Oracle数据库是一种广泛应用于企业级环境的大型关系型数据库系统,其性能优化是数据库管理中至关重要的环节。随着数据量的不断增长和数据库访问量的增加,性能的下降是一个普遍问题,这直接影响了业务的效率和数据...

    Oracle数据库中的索引管理技术.pdf

    Oracle数据库中的索引管理技术 索引是 Oracle 数据库中的一个重要对象,它可以大大提高数据库中的数据检索速度。索引是包含表中选定字段的信息的对象,这些信息以某种规律排序,有一个指针指向存放实际数据的记录。...

Global site tag (gtag.js) - Google Analytics