转自: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');
如果用这句代码来操作上面表中的数据,那么将会报错.
根据Oracle中Where条件的执行顺序,将会先执行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中新增字段。新增字段的基本语法是: ```sql alter table tablename add (column datatype [default value][null/not null],…...
Oracle数据库核心考点是数据库管理系统中非常重要的知识点,本文将从多方面详细讲解Oracle数据库的相关知识点,为读者提供了一个系统的知识框架。 一、SQL*Plus命令 SQL*Plus是一个强大的命令行工具,用于访问和...
在Oracle数据库管理中,有时我们可能需要对表中的字段顺序进行调整。然而,通常的做法是通过备份、删除原表并重建来达到这一目的,这种方法不仅耗时而且繁琐。幸运的是,经过一番研究与探索后发现,实际上有一种更加...
### Oracle数据库开发面试必备知识点详解 #### 一、Oracle SQL查询优化 ...以上内容涵盖了Oracle数据库开发过程中的一些常见知识点,希望能帮助你在面试中更加自信,并在实际工作中应用这些知识来优化数据库性能。
2. **WHERE子句中的连接顺序**:从下往上解析WHERE子句,将能够过滤最多记录的条件放在最后,这样可以减少处理的数据量。 3. **避免在SELECT中使用通配符'*'**:使用具体的列名代替'*',以减少解析时间和内存消耗。...
### Oracle数据库关于SQL的执行计划 #### 1. Oracle 的 Optimizer 及其相关知识 在 Oracle 数据库中,执行 SQL 查询之前会先生成一个执行计划(Execution Plan),该计划由 Oracle 的优化器(Optimizer)根据一...
本文总结了 30 多条 Oracle 数据库优化的经验,涵盖了选择最有效率的表名顺序、WHERE 子句中的连接顺序、SELECT 子句中避免使用 ‘*‘、减少访问数据库的次数、使用 DECODE 函数来减少处理时间、整合简单、无关联的...
Oracle 数据库导出文本的方法是 Oracle 数据库的入门级应用,旨在介绍如何将 Oracle 数据库中的数据导出到文本文件中。在实际应用中,我们经常需要将查询结果导出到文本文件中,以便于后续处理或分析。下面我们将...
### Oracle数据库学习知识点详解 #### 一、Oracle数据库概述 - **Oracle数据库10g**:本书主要基于Oracle 10g版本编写,虽然技术在不断进步,但Oracle数据库的核心概念和技术仍然保持一致,适用于其他版本的学习。 ...
1. **表空间(Tablespace)**:表空间是Oracle数据库中的逻辑存储单元,用于组织和管理数据文件。一个数据库可以包含多个表空间,而每个表空间由一个或多个数据文件组成。 - **系统表空间(System Tablespace)**:默认...
### SQL语句执行顺序说明 #### 一、SQL语句准备执行阶段 当SQL语句进入Oracle的库缓存后,为了确保其...通过遵循上述步骤和技巧,可以有效地提高SQL语句在Oracle数据库中的执行效率,从而提升应用程序的整体性能。
在编写SQL语句时,应尽量按照自下而上的顺序来编写WHERE子句中的连接条件,并将能够过滤掉最多记录的条件放在末尾。在SELECT子句中,避免使用‘*’,而应该明确列出需要查询的列,这样可以减少数据库解析SQL语句时的...
14. **用WHERE子句替换HAVING子句**:在能的情况下,将过滤条件移到WHERE子句中,以避免在GROUP BY后的HAVING子句中处理,因为HAVING通常会带来额外的计算成本。 15. **减少对表的查询**:通过缓存、物化视图、汇总...
此外,编写高效的WHERE子句也是关键,比如通过调整条件顺序,可以显著影响查询速度。 另外,避免不必要的GROUP BY操作,因为GROUP BY通常伴随着较高的计算代价,只有在确实需要聚合数据时才应使用。同时,注意优化...
在Oracle数据库中,分页查询是一项关键功能,尤其在构建高效的数据检索系统,如自定义搜索引擎时,确保用户能够分批浏览大量数据。由于Web应用的无状态特性,每个请求都是独立的,维持数据库游标以供后续请求是低效...
Oracle数据库死锁是数据库系统中常见的问题,它发生在两个或多个事务在执行过程中,因争夺资源而造成的一种相互等待的现象。当这种情况发生时,如果没有外力干预,这些事务都将无法继续执行,形成一种僵局。了解如何...
Oracle数据库是一种广泛应用于企业级环境的大型关系型数据库系统,其性能优化是数据库管理中至关重要的环节。随着数据量的不断增长和数据库访问量的增加,性能的下降是一个普遍问题,这直接影响了业务的效率和数据...
Oracle数据库中的索引管理技术 索引是 Oracle 数据库中的一个重要对象,它可以大大提高数据库中的数据检索速度。索引是包含表中选定字段的信息的对象,这些信息以某种规律排序,有一个指针指向存放实际数据的记录。...