ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,因此FROM子句中写在最后的表(基础表 driving table)将被最先处理. 在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表.当ORACLE处理多个表时, 会运用排序及合并的方式连接它们.首先,扫描第一个表(FROM子句中最后的那个表)并对记录进行派序,然后扫描第二个表(FROM子句中最后第二个表),最后将所有从第二个表中检索出的记录与第一个表中合适记录进行合并.
例如: A表2万条记录,B表1条记录
选择B作为基础表 (最好的方法)
select count(*) from a ,b执行时间0.96秒
选择TAB2作为基础表 (不佳的方法)
select count(*) from b,a 执行时间26.09秒
SELECT子句中避免使用 ‘ * ‘
当你想在SELECT子句中列出所有的COLUMN时,使用动态SQL列引用 ‘*’ 是一个方便的方法.不幸的是,这是一个非常低效的方法. 实际上,ORACLE在解析的过程中, 会将’*’ 依次转换成所有的列名, 这个工作是通过查询数据字典完成的, 这意味着将耗费更多的时间.
<> 操作符(不等于)
不等于操作符是永远不会用到索引的,因此对它的处理只会产生全表扫描。
推荐方案:用其它相同功能的操作运算代替,如
a<>0 改为 a>0 or a<0
a<>’’ 改为 a>’’
WHERE子句中的连接顺序.
ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前, 那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾.
例如:(低效,执行时间156.3秒)
select * from emp e where sal > 50000 and job = ‘manager’
and 25 < (select count(*) from emp where mgr=e.empno);
(高效,执行时间10.6秒)
select * from emp e where 25 < (select count(*) from emp where mgr=e.empno)
and sal > 50000 and job = ‘manager’;
LIKE操作符
LIKE操作符可以应用通配符查询,里面的通配符组合可能达到几乎是任意的查询,但是如果用得不好则会产生性能上的问题,如LIKE ‘%5400%’ 这种查询不会引用索引,而LIKE ‘X5400%’则会引用范围索引。一个实际例子:用YW_YHJBQK表中营业编号后面的户标识号可来查询营业编号 YY_BH LIKE ‘%5400%’ 这个条件会产生全表扫描,如果改成YY_BH LIKE ’X5400%’ OR YY_BH LIKE ’B5400%’ 则会利用YY_BH的索引进行两个范围的查询,性能肯定大大提高。
尽量多使用COMMIT 只要有可能,在程序中尽量多使用COMMIT, 这样程序的性能得到提高,需求也会因为COMMIT所释放的资源而减少:
COMMIT所释放的资源:
a. 回滚段上用于恢复数据的信息.
b. 被程序语句获得的锁
c. redo log buffer 中的空间
d. ORACLE为管理上述3种资源中的内部花费
减少对表的查询,在含有子查询的SQL语句中,要特别注意减少对表的查询.
尽量多使用表的别名(Alias),当在SQL语句中连接多个表时, 请使用表的别名并把别名前缀于每个Column上.这样一来,就可以减少解析的时间并减少那些由Column歧义引起的语法错误.
IN 操作符
用IN写出来的SQL的优点是比较容易写及清晰易懂,这比较适合现代软件开发的风格。
但是用IN的SQL性能总是比较低的,从ORACLE执行的步骤来分析用IN的SQL与不用IN的SQL有以下区别:
ORACLE试图将其转换成多个表的连接,如果转换不成功则先执行IN里面的子查询,再查询外层的表记录,如果转换成功则直接采用多个表的连接方式查询。由此可见用IN的SQL至少多了一个转换的过程。一般的SQL都可以转换成功,但对于含有分组统计等方面的SQL就不能转换了。
推荐方案:在业务密集的SQL当中尽量不采用IN操作符。
NOT IN操作符
此操作是强列推荐不使用的,因为它不能应用表的索引。
推荐方案:用NOT EXISTS 或(外连接+判断为空)方案代替。
分享到:
相关推荐
### Oracle SQL执行效率:查找与解决 #### 一、资源消耗分析 在Oracle中,SQL语句执行效率低下通常表现为资源过度消耗,这可能包括CPU时间、内存使用、磁盘I/O等。具体分析可从以下几个方面入手: 1. **响应时间...
### 显示 SQL 执行效率 在数据库管理与优化过程中,SQL 语句的执行效率是至关重要的一个方面。本文将详细介绍如何通过 Oracle 的 SQL*Plus 工具来查看 SQL 语句的执行效率,并手动设置 SQL 语句的执行计划显示方式...
以下是一些针对提高 SQL 执行效率的重要知识点: 1. **选择最有效的表名顺序**:在 FROM 子句中,Oracle 从右到左处理表,所以应该先处理记录数最少的表,以减少扫描的数据量。对于多表联接,基础表(被其他表引用...
在SQL编程中,提升SQL执行效率是至关重要的,特别是在处理大量数据时。下面将详细解释如何根据查询逻辑执行顺序来优化SQL语句。 首先,理解SQL的逻辑执行顺序是优化的前提。按照标准的SQL解析顺序,它依次为: 1. ...
随着技术的发展,新的优化策略和工具不断出现,保持学习和适应能力是提高SQL执行效率的关键。 总之,优化SQL语句执行效率是一个多方面的工作,需要结合具体业务场景,综合运用索引策略、SQL编写技巧、数据库配置和...
SQL艺术、提高SQL执行效率的方法总结SQL艺术、提高SQL执行效率的方法总结SQL艺术、提高SQL执行效率的方法总结SQL艺术、提高SQL执行效率的方法总结SQL艺术、提高SQL执行效率的方法总结SQL艺术、提高SQL执行效率的方法...
在IT领域,尤其是在数据库管理与优化方面,提高SQL执行效率是至关重要的。高效的SQL查询不仅能够提升系统的响应速度,还能显著降低服务器资源消耗,从而节省成本。以下是从标题、描述及部分提供的内容中提炼出的关键...
为提高oracle的sql执行效率,优化性能,通过oracle表分析功能进行调整,能加快sql查询效率2倍以上
详细介绍了使用 BULK COLLECT 进行批量操作 提高sql的执行效率 使用MERGE INTO USING 一条sql搞定 新增和修改 使用connect by 进行递归树查询
SQL 执行效率优化 SQL 执行效率优化是数据库管理和优化中非常重要的一方面,好的 SQL 执行效率可以极大地提高系统的性能和响应速度。本文将从多方面讨论 SQL 执行效率优化的方法和技术。 1. 选择最有效率的表名...
在MySQL数据库操作中,优化SQL执行效率是提升系统性能的关键因素之一。特别是在大量数据插入时,传统的单条插入方式会显著降低处理速度,并可能导致数据库锁表,影响其他并发操作。本篇将详细介绍MySQL批量插入优化...
本文将详细探讨提高SQL执行效率的三种主要方法,这些方法可以帮助减轻数据库剖析过程对系统性能的影响。 首先,我们可以利用`ordered`提示来优化表格合并的顺序。在处理多表连接查询时,Oracle需要分析所有可能的...
因此,掌握如何查看和分析执行效率不高的SQL语句是DBA(数据库管理员)和开发人员必备的技能之一。 SQL Server提供了丰富的DMV(动态管理视图)和系统存储过程,用于监控和诊断数据库的运行状态。其中,`sys.dm_...
在Oracle数据库管理中,SQL执行效率是至关重要的,因为它直接影响到数据库系统的性能和响应时间。以下是一些关于如何提高Oracle SQL执行效率的建议: 1. **基础表的选择**:在FROM子句中涉及多表联接时,应选择记录...
本文将围绕标题“SQL效率查询”及其描述“直接运行函数,可以查看数据库中哪些SQL比较占用资源”的核心思想,详细介绍如何通过特定的SQL脚本来分析SQL执行效率。 #### 一、理解SQL效率查询的重要性 - **提升用户...
Oracle SQL 语句执行效率问题查找与解决方法 一、 Oracle SQL 语句执行效率问题查找方法 Oracle 数据库系统中, SQL 语句的执行效率问题是一个非常重要的问题。在实际应用中,我们经常会碰到一些性能不佳的 SQL ...
在大数据时代,SQL查询效率优化是数据库管理与开发中的关键环节。无论是SQL Server、Oracle、MySQL还是DB2,提升查询速度对于系统性能至关重要。本文将深入探讨如何优化SQL查询,以实现更高效的数据处理。 首先,...
优化SQL语句提高oracle执行效率(34种方法),提高你的sql执行效率,特别针对大数据。