PLSQL程序优化和性能分析方法要点
plsql 使用技巧

plsql 使用技巧PL/SQL是Oracle数据库中的一种编程语言,它结合了SQL语句和过程性编程语言的特点,提供了一种强大的数据库开发工具。
下面是一些PL/SQL使用技巧:1. 使用块:块是PL/SQL程序的基本单元。
使用块可以将一组相关的语句组织在一起,并提供一些错误处理机制。
块通常用于存储过程、触发器和函数中。
2. 使用游标:游标是用于在PL/SQL程序中处理查询结果的一种机制。
使用游标可以逐行处理查询结果,提供更灵活的数据操作方式。
3. 使用异常处理:异常处理是一种处理程序运行过程中出现异常的机制。
在PL/SQL中,可以使用EXCEPTION块来处理异常情况,提高程序的稳定性。
4. 使用存储过程和函数:存储过程和函数是一种将一组SQL语句和过程性语句组织在一起的机制。
使用存储过程和函数可以将复杂的逻辑封装起来,提高程序的可维护性和重用性。
5. 使用触发器:触发器是在数据库表中定义的一种特殊类型的存储过程。
使用触发器可以根据数据库表中的数据变化触发特定的逻辑处理。
6. 使用PL/SQL调试器:PL/SQL调试器是一种用于调试PL/SQL程序的工具。
使用调试器可以逐步执行PL/SQL代码,并查看变量的值和程序执行的状态,方便程序的调试和排错。
7. 使用PL/SQL包:PL/SQL包是将相关的存储过程、函数和变量组织在一起的一种机制。
使用包可以提供更好的模块化和封装性,方便程序的管理和维护。
8. 使用PL/SQL游标变量:PL/SQL游标变量是一种特殊的变量类型,用于在程序中保存游标的状态。
使用游标变量可以提高游标的灵活性和可重用性。
9. 使用PL/SQL集合类型:PL/SQL提供了各种集合类型,如数组、表和记录。
使用集合类型可以方便地处理多个数据元素,提高程序的性能和可读性。
10. 使用PL/SQL优化技巧:在编写和调试PL/SQL程序时,可以使用一些优化技巧来提高程序的性能。
例如,使用合适的索引、批量操作和合理的逻辑结构等。
plsql developer14使用技巧

plsql developer14使用技巧PL/SQL Developer是一款功能强大的Oracle数据库开发工具,用于编写、调试和优化PL/SQL代码。
无论是新手还是有经验的开发人员,在使用PL/SQL Developer时都可以从以下几个方面提高开发效率和代码质量。
一、界面设置及快捷键1.适应自己的工作习惯,可以根据需要配置界面布局、字体大小等。
2.设置自己喜欢的配色方案,减少眼部疲劳。
3.学习并使用PL/SQL Developer的快捷键,例如Ctrl+空格可以自动补全关键字和对象名称,F9可以执行选中的代码块等。
二、导航和对象查看1.使用对象浏览器可以方便地查看数据库对象的结构,双击可直接编辑对象。
2.使用查找功能可以快速定位代码中的特定关键字。
3.在代码中使用Ctrl+点击可以快速跳转到对象的定义或引用位置。
三、代码编写和调试1.编写代码时,利用代码提示和补全功能,避免拼写错误和语法错误。
2.使用代码块编辑器可以快速生成常用代码块,提高开发效率。
3.使用断点和调试功能,可以逐行调试代码,查看变量值和执行路径,帮助定位问题和解决bug。
四、性能调优和优化1.使用性能分析器可以对SQL语句进行调优和优化,定位性能瓶颈并提出优化建议。
2.使用执行计划分析工具可以查看SQL语句的执行计划,优化查询性能。
3.使用性能图表可以直观地查看数据库的性能状况,及时调整参数和优化SQL语句。
五、版本控制和团队协作1.将代码纳入版本控制系统,保证代码的版本管理和历史记录。
2.使用代码注释和文档功能,方便他人理解和维护代码。
3.与团队成员共享代码和工作成果,可以通过文件比较功能检查代码的差异和合并更新。
六、自动化和批处理1.使用脚本编辑器和批处理功能可以批量执行SQL语句,提高工作效率。
2.学习并使用PL/SQL Developer的命令行工具,可以通过命令行执行常用操作,如导出数据、执行脚本等。
七、学习和社区支持1.阅读PL/SQL Developer的官方文档,了解每个功能的详细用法和注意事项。
浅谈Oracle数据库SQL性能优化

千里之行,始于足下。
浅谈Oracle数据库SQL性能优化
SQL性能优化在Oracle数据库中是非常重要的,并且是一个复杂而繁琐的过程。
下面是一些常见的SQL性能优化技巧。
1. 使用正确的索引:索引是加快查询速度的重要因素。
确保表中的列被正确索引,以便Oracle能够快速定位所需的数据。
2. 优化查询语句:编写高效的查询语句是提高性能的关键,避免使用大量的子查询、联合查询以及不必要的计算。
3. 提高表的设计:优化表的结构和设计,包括拆分表、合并表、垂直分区和水平分区等。
4. 使用合适的数据类型:使用合适的数据类型可以节省存储空间和提高查询效率。
5. 避免使用全表扫描:全表扫描是一种费时的操作,尽量避免使用它,使用索引或其他技术来提高查询效率。
6. 分析并优化执行计划:使用Oracle的性能分析工具来分析查询执行计划,找出慢查询的原因,并优化查询的执行计划。
7. 优化硬件和服务器配置:提高服务器的性能,如增加内存、优化磁盘和网络等。
8. 定期收集统计信息:定期收集表和索引的统计信息,以便Oracle优化查询的执行计划。
第1页/共2页
锲而不舍,金石可镂。
9. 使用缓存和预编译:使用数据库缓存和预编译技术来提高查询速度。
10. 并发控制:合理设计并发控制机制,避免不必要的锁和死锁,提高查询和更新的并发性能。
总之,SQL性能优化是一个综合性工作,需要深入了解Oracle数据库的架构和原理,并结合具体的业务场景进行优化。
通过合理的索引设计、优化查询语句、优化表设计以及优化硬件和服务器配置等手段,可以大大提高Oracle数据库的性能。
OraclePLSQL规范、性能

3. 过程命名:一般以体现具体用途的英语单词或者缩写来命名,没有其他特殊要求
示例:UPDATE_EMPLOYEE_DEPT_INFO(含义:更新员工部门信息)
4. 别名:一般别名尽量使用表名的含义缩写或者用表被’_’符号分隔的第一字母的拼合作为别名
示例:PS_EMPLOYEE_PAYMENT_HISTORY PEPH
的运行性能。
6. 对于大批量数据处理的程序,良好的COMMIT/ROLLBACK机制。 7. 对于取出的大批量数据,尽量保存在内存中,不要多次重复读取大批量数据。 8. 适当使用临时表作为数据中转池。
PLSQL性能规范 -代码语句规范
良好的代码语句规范,可以尽可能的减少对数据表的全表扫描,尽可能好的 使用索引,从而使用最优的执行计划。
1. 尽可能的不使用子查询的机制。
2. 如果必须使用子查询,也尽可能不要在子查询中嵌套更多层次的子查询。
3. 如果可以替代,尽量使用Function的计算来得到想要的返回值(通过变量的使用而 使得SQL的重用性增强,不需要再次解析从而提升性能)。
PLSQL性能规范 -代码语句规范 – 建立索引规范
3. 数据库对象如果需要占用存储空间的(Table,Index,物化视图),都必须创建到规定的表 空间中。不能随意存放。
4. 所有数据库对象的创建/变更,都需要有明确的文件记录。
5. 所有应用系统自创建的标准的数据库对象,都尽可能的不去做变动,以免影响性能或者 导致未知问题。
6. 数据库对象的命名要规范。
RBO : Rule-Based Optimizer CBO : Cost-Based Optimizer
PLSQL性能规范 -代码语句规范 – 子查询
plsql explain 用法

PL/SQL 是Oracle 数据库中的一种编程语言,用于开发存储过程、触发器和函数等数据库对象。
而PL/SQL Explain 是Oracle 提供的工具,用于分析和解释PL/SQL 代码的性能问题。
下面我将详细介绍PL/SQL Explain 的定义、用法、重点、难点和注意事项,并结合实际案例进行说明。
定义:PL/SQL Explain 是Oracle 数据库中提供的一种工具,用于分析PL/SQL 代码的性能问题。
它可以帮助开发人员理解代码的执行计划和性能瓶颈,从而优化代码,提高数据库性能。
用法:使用PL/SQL Explain 分析代码性能的步骤如下:1.打开SQL Developer 或其他Oracle 数据库管理工具,连接到目标数据库。
2.在工具中选择“Explain Plan”选项,将要分析的PL/SQL 代码粘贴到指定位置。
3.点击“Explain”按钮,PL/SQL Explain 将生成一个执行计划,展示代码的执行过程和性能数据。
4.分析执行计划,找出潜在的性能问题,如嵌套循环、排序操作等。
5.根据分析结果,对代码进行优化,提高数据库性能。
重点:PL/SQL Explain 的重点在于分析PL/SQL 代码的执行计划。
执行计划是Oracle 数据库在执行SQL 语句时的一种优化策略,它包括了数据检索、表连接、排序等操作的顺序和方式。
通过分析执行计划,可以找出代码中的性能瓶颈,针对性地进行优化。
难点:使用PL/SQL Explain 分析代码性能的难点在于理解执行计划中的各种操作符和参数含义。
不同的操作符和参数可能对性能产生重大影响,需要深入了解Oracle 数据库的内部机制和优化策略才能做出正确的优化决策。
注意事项:在使用PL/SQL Explain 时,需要注意以下几点:1.确保代码已经通过测试和验证,避免在分析过程中引入新的错误或异常。
2.在分析执行计划时,要结合实际业务场景和数据规模进行考虑,避免过度优化导致代码复杂度增加。
PL SQL 用户指南和参考第十二章 PLSQL应用程序性能调优

第十二章PL/SQL应用程序性能调优一、PL/SQL性能问题的原由当基于PL/SQL的应用程序执行效率低下时,通常是由于糟糕的SQL语句、编程方法,对PL/SQL基础掌握不好或是滥用共享内存造成的。
∙PL/SQL中糟糕的SQL语句PL/SQL编程看起来相对比较简单,因为它们的复杂内容都隐藏在SQL语句中,SQL语句常常分担大量的工作。
这就是为什么糟糕的SQL语句是执行效率低下的主要原因了。
如果一个程序中包含很多糟糕的SQL语句,那么,无论PL/SQL语句写的有多么好都是无济于事的。
如果SQL语句降低了我们的程序速度的话,就要按下面列表中的方法分析一下它们的执行计划和性能,然后重新编写SQL语句。
例如,查询优化器的提示就可能会排除掉问题,如没有必要的全表扫描。
1.EXPLAIN PLAN语句2.使用TKPROF的SQL Trace功能3.Oracle Trace功能∙不好的编程习惯通常,不好的编程习惯也会给程序带来负面影响。
这种情况下,即使是有经验的程序员写出的代码也可能妨碍性能发挥。
对于给定的一项任务,无论所选的程序语言有多么合适,编写质量较差的子程序(例如,一个很慢的分类或检索函数)可能毁掉整个性能。
假设有一个需要被应用程序频繁调用的查询函数,如果这个函数不是使用哈希或二分法,而是直接使用线性查找,就会大大影响效率。
不好的程序指的是那些含有从未使用过的变量的,传递没有必要的参数的,把初始化或计算放到不必要的循环中执行的程序等等。
∙内置函数的重复PL/SQL提供了许多高度优化过的函数,如REPLACE、TRANSLATE、SUBSTR、INSTR、RPAD和LTRIM 等。
不要手工编写我们自己的版本,因为内置函数已经是很高效的了。
即使内置函数的功能远远超过我们的需要,也不要手工实现它们功能的子集。
∙低效的流程控制语句在计算逻辑表达式值的时候,PL/SQL使用短路的计算方式。
也就是说,一旦结果可以被确定下来,PL/SQL 就会停止剩余的表达式计算。
SQL性能分析与查询优化技巧

SQL性能分析与查询优化技巧随着数据量的不断增大和业务需求的复杂化,数据库查询性能优化变得尤为重要。
合理优化SQL查询可以显著提高应用程序的响应速度,减少资源消耗,并提升用户体验。
本文将介绍一些常用的SQL性能分析和查询优化技巧,帮助读者提升数据库查询的效率。
一、SQL性能分析1. 使用EXPLAIN分析查询计划在优化SQL查询之前,了解查询语句的执行计划是非常重要的。
通过使用数据库提供的EXPLAIN关键字,可以查看查询计划的详细信息,包括表的读取顺序、使用的索引、连接算法等。
根据查询计划,可以判断查询是否存在性能瓶颈,并定位需要优化的部分。
2. 检查索引使用情况索引是提高查询效率的重要手段之一。
通过检查查询计划中的索引使用情况,可以判断是否存在需要创建或优化的索引。
使用合适的索引可以减少数据库的物理读取和排序操作,提升查询性能。
3. 分析慢查询日志慢查询日志是数据库记录执行时间超过阈值的查询语句的日志文件。
通过分析慢查询日志,可以了解到哪些查询频繁出现且执行时间较长,从而可以有针对性地进行优化。
可以通过调整查询语句、增加索引或优化数据库结构来提升慢查询的性能。
二、查询优化技巧1. 减少查询返回的数据量尽量减少不必要的列和行的返回,只查询所需的数据,避免返回大量无用的数据。
可以使用SELECT语句的列投影和限制条件来实现,以减少数据传输和处理的开销。
2. 避免使用通配符查询通配符查询(例如LIKE '%value%')会导致全表扫描,性能较低。
如果确实需要使用通配符查询,可以考虑创建合适的前缀索引以加快查询速度。
3. 合理利用索引索引的使用不当会导致性能下降。
要避免在频繁更新的列上创建过多的索引,因为索引的维护也需要消耗资源。
同时,根据查询的特点,选择合适的索引类型(如B树索引、哈希索引、全文索引)以及多列索引,可以提高查询性能。
4. 避免跨表查询多表关联查询通常会导致性能较低。
oracle sql优化常用的15种方法

oracle sql优化常用的15种方法1. 使用合适的索引索引是提高查询性能的重要手段。
在设计表结构时,根据查询需求和数据特点合理地添加索引。
可以通过创建单列索引、复合索引或者位图索引等方式来优化SQL查询。
2. 确保SQL语句逻辑正确SQL语句的逻辑错误可能会导致低效查询。
因此,在编写SQL语句前,需要仔细分析查询条件,确保逻辑正确性。
3. 使用连接替代子查询在一些场景下,使用连接(JOIN)操作可以替代子查询,从而减少查询的复杂度。
连接操作能够将多个数据集合合并为一个结果集,避免多次查询和表的扫描操作。
4. 避免使用通配符查询通配符查询(如LIKE '%value%')在一些情况下可能导致全表扫描,性能低下。
尽量使用前缀匹配(LIKE 'value%')或者使用全文索引进行模糊查询。
5. 注意选择合适的数据类型选择合适的数据类型有助于提高SQL查询的效率。
对于整型数据,尽量使用小范围的数据类型,如TINYINT、SMALLINT等。
对于字符串数据,使用CHAR字段而不是VARCHAR,可以避免存储长度不一致带来的性能问题。
6. 优化查询计划查询计划是数据库在执行SQL查询时生成的执行计划。
通过使用EXPLAIN PLAN命令或者查询计划工具,可以分析查询计划,找出性能瓶颈所在,并对其进行优化。
7. 减少磁盘IO磁盘IO是影响查询性能的重要因素之一。
可以通过增加内存缓存区(如SGA)、使用高速磁盘(如SSD)、使用合适的文件系统(如ASM)等方式来减少磁盘IO。
8. 分区表对于大数据量的表,可以考虑使用分区表进行查询优化。
分区表可以将数据按照某个规则分散到不同的存储区域,从而减少查询范围和加速查询。
9. 批量操作尽量使用批量操作而不是逐条操作,可以减少数据库的事务处理开销,提高SQL执行效率。
可以使用INSERT INTO SELECT、UPDATE、DELETE等批量操作语句来实现。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.前言1.1目的性能测试是测试中比较重要的工作,性能测试应分为压力的测试和性能的测试,其中性能问题中绝大部分都是由于程序编写的不合理、不规范造成的。
本文档说明了程序中常见的不优化的脚本编写,导致的性能问题,并且在也描述了怎样去跟踪和解决程序上的性能问题的方法。
在最后一章里面描述了做一个白盒测试工具测试性能问题的设计思想。
1.2文档说明本文档只说明PLSQL 编写的优化问题,不包括ORACLE本身的性能优化(内存SGA、系统参数、表空间等)、操作系统的性能问题和硬件的性能问题。
对于PLSQL程序优化方面的内容有很多,本文档列出在我们实际工作中一些常见的情况。
本文档难免有不正确的地方,也需要大家给予指正。
本文档举例说明的问题语句不是实际程序中真正存在的,只是让大家能看起来更容易理解,但这些语句也不代表在我们程序中其他部分语句不存在这些问题。
举例说明中的语句采用的是社保核心平台的数据字典,在举例描述中没有标明表名和字段名的含义,还需单独参考。
1.4参考资料编号资料名称作者日期出版单位2.PLSQL程序优化原则2.1导致性能问题的内在原因导致系统性能出现问题从系统底层分析也就是如下几个原因:●CPU 占用率过高,资源争用导致等待●内存使用率过高,内存不足需要磁盘虚拟内存●IO 占用率过高,磁盘访问需要等待2.2PLSQL优化的核心思想PLSQL优化实际上就是避免出现“导致性能问题的内在原因”,实际上编写程序,以及性能问题跟踪应该本着这个核心思想去考虑和解决问题。
● PLSQL 程序占用CPU的情况⏹系统解析SQL语句执行,会消耗CPU的使用⏹运算(计算)会消耗CPU的使用● PLSQL 程序占用内存的情况⏹读写数据都需要访问内存⏹内存不足时,也会使用磁盘● PLSQL 程序增大IO的情况⏹读写数据都需要访问磁盘IO⏹读取的数据越多,IO就越大大家都知道CPU现在都很高,计算速度非常快;访问内存的速度也很快;但磁盘的访问相对前两个相比速度就差的非常大了,因此PLSQL 性能优化的重点也就是减少IO的瓶颈,换句话说就是尽量减少IO的访问。
性能的优先级CPU->内存->IO,影响性能的因素依次递增。
根据上面的分析,PLSQL优化的核心思想为:1.避免过多复杂的SQL 脚本,减少系统的解析过程2.避免过多的无用的计算,例如:死循环3.避免浪费内存空间没有必要的SQL脚本,导致内存不足4.内存中计算和访问速度很快5.尽可能的减少磁盘的访问的数据量,该原则是PLSQL 优化中重要思想。
6.尽可能的减少磁盘的访问的次数,该原则是PLSQL优化中重要思想。
下面的章节具体介绍常见影响性能的SQL 语句情况。
2.3ORACLE优化器ORACLE的优化器:a.RULE(基于规则)b. COST(基于成本)c. CHOOSE(选择性)设置缺省的优化器,可以通过对init.ora文件中OPTIMIZER_MODE参数的各种声明,如RULE,COST,CHOOSE,ALL_ROWS,FIRST_ROWS. 你当然也在SQL句级或是会话(session)级对其进行覆盖.为了使用基于成本的优化器(CBO, Cost-Based Optimizer) , 你必须经常运行analyze命令,以增加数据库中的对象统计信息(object statistics)的准确性.如果数据库的优化器模式设置为选择性(CHOOSE),那么实际的优化器模式将和是否运行过analyze命令有关. 如果table已经被analyze过, 优化器模式将自动成为CBO , 反之, 数据库将采用RULE形式的优化器.在缺省情况下,ORACLE采用CHOOSE优化器,为了避免那些不必要的全表扫描(full table scan) , 你必须尽量避免使用CHOOSE优化器,而直接采用基于规则或者基于成本的优化器.在oracle10g 前默认的优化模式是CHOOSE,10g默认是ALL_ROWS,我不建议大家去改动ORACLE的默认优化模式。
2.4PLSQL优化主要说明了在SQL编写上和PLSQL 程序编写上可以优化的地方。
2.4.1选择最有效率的表名顺序只在基于规则的优化器rule中有效,目前我们oracle 选择的优化器基本都不选择rule,因此该问题基本不会出现,但为了安全和规范起见,建议编程习惯采用该规则。
ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,因此FROM子句中写在最后的表(基础表driving table)将被最先处理. 在FROM 子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表.当ORACLE处理多个表时, 会运用排序及合并的方式连接它们.首先,扫描第一个表(FROM子句中最后的那个表)并对记录进行派序,然后扫描第二个表(FROM子句中最后第二个表),最后将所有从第二个表中检索出的记录与第一个表中合适记录进行合并.例如:表ac01有16,384 条记录表ab01 有1 条记录选择ab01作为基础表(好的方法)select count(*)from ac01,ab01 执行时间0.96秒选择ac01作为基础表(不好的方法)select count(*)from ab01,ac01 执行时间26.09秒2.4.2WHERE子句中的连接顺序ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE 条件之前例如:(低效)SELECT ab01.aab001,ab02.aab051FROM ab01,ab02WHERE ab02.aae140=’31’AND ab01.aab001=ab02.aab001;(高效)SELECT ab01.aab001,ab02.aab051FROM ab01,ab02WHERE ab01.aab001=ab02.aab001AND ab02.aae140=’31’;2.4.3SELECT 子句中避免使用‘*‘当你想在SELECT 子句中列出所有的COLUMN时,使用动态SQL列引用‘*'是一个方便的方法.不幸的是,这是一个非常低效的方法.实际上,ORACLE在解析的过程中, 会将'*' 依次转换成所有的列名, 这个工作是通过查询数据字典完成的, 这意味着将耗费更多的时间。
2.4.4用EXISTS 替代IN实际情况看,使用exists替换in 效果不是很明显,基本一样。
在许多基于基础表的查询中,为了满足一个条件,往往需要对另一个表进行联接.在这种情况下,使用EXISTS(或NOT EXISTS)通常将提高查询的效率.低效:SELECT*FROM ac01Where aac001in (select aac001from ac02where aab001=str_aab001and aae140=’31’);或SELECT*FROM ac01Where aac001in (select distinct aac001 from ac02where aab001=str_aab001and aae140=’31’);注意使用distinct也会影响速度高效:SELECT*FROM ac01Where exists (select 1from ac02where aac001=ac01.aac001and aab001=str_aab001and aae140=’31’);in 的常量列表是优化的(例如:aab019in (‘20’,’30’)),不用exists替换;in 列表相当于or2.4.5用NOT EXISTS 替代NOT INOracle在10g之前版本not in 都是最低效的语句,虽然在10g上not in做到了一些改进,但仍然还是存在一些问题,因此我们一定要使用not exists 来替代not in 的写法。
在子查询中,NOT IN 子句将执行一个内部的排序和合并. 无论在哪种情况下,NOT IN 都是最低效的(因为它对子查询中的表执行了一个全表遍历). 为了避免使用NOT IN,我们可以把它改写成NOT EXISTS.例如:SELECT*FROM ac01WHERE aab001NOT IN (SELECT aab001from ab01where aab020=’100’);为了提高效率.改写为:SELECT*FROM ac01WHERE not exists (SELECT1from ab01where aab001=ac01.aab001 and aab020=’100’);2.4.6用表连接替换EXISTS在子查询的表和主表查询是多对一的情况,一般采用表连接的方式比EXISTS 更有效率。
例如:低效:SELECT ac01.*FROM ac01Where exists (select 1from ac02where aac001=ac01.aac001and aab001=ac01.aab001and aae140='31'and aae041='200801');高效:SELECT ac01.*FROM ac02,ac01Where ac02.aac001=ac01.aac001and ac02.aab001=ac01.aab001and ac02.aae140='31'and aae041='200801';到底exists 和表关联哪种效率高,其实是根据两个表之间的数据量差别大小是有关的,如果差别不大实际上速度基本差不多。
2.4.7用EXISTS 替换DISTINCT当提交一个包含一对多表信息(比如个人基本信息表和个人参保信息表)的查询时,避免在SELECT 子句中使用DISTINCT.一般可以考虑用EXISTS替换例如:低效:select distinct ac01.aac001from ac02,ac01where ac02.aac001=ac01.aac001and ac02.aae140='31'and ac01.aab001='100100';高效:select ac01.aac001from ac01where exists(select1from ac02 where aac001= ac01.aac001and aae140='31')and ac01.aab001='100100';EXISTS 使查询更为迅速,因为RDBMS核心模块将在子查询的条件一旦满足后,立刻返回结果。
因此如果不是特别研究和追求速度的话(例如:数据转换),查询一个表的数据需要关联其他表的这种情况查询,建议采用EXISTS 的方式。