数据库培训-高效率sql语句基础_第1页
数据库培训-高效率sql语句基础_第2页
数据库培训-高效率sql语句基础_第3页
数据库培训-高效率sql语句基础_第4页
数据库培训-高效率sql语句基础_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、OracleOracle数据库培训数据库培训高效率高效率SQL语句基础语句基础 -张林张林一个高效率的数据库系统是从两个方面来评价的:响应时间和吞吐量。在应用系统开发阶段,由于开发库上的数据比较少,在SQL语句的编写上感觉不出各种写法的性能差异,在将应用系统提交实际应用后,随着数据库中数据的增加,系统的响应速度就会成为最需要解决的主要问题之一。缩短系统的响应时间,增加操作的并发度,可以提高系统的吞吐量。要缩短系统的响应时间,就需要可以高效率执行的SQL语句。引言引言一、优化器介绍一、优化器介绍二、高效率二、高效率SQL基础基础三、三、oracle的执行计划的执行计划四、书写高效率四、书写高效率

2、SQL语句建议语句建议目录目录Oracle数据库中优化器(Optimizer)是SQL分析和执行的优化工具,它负责指定SQL的执行计划,也就是它负责保证SQL执行的效率最高,比如优化器决定Oracle以什么样的方式来访问数据,是全表扫描(FullTableScan),索引范围扫描(IndexRangeScan)还是全索引快速扫描(INDEXFastFullScan:INDEX_FFS);对于表关联查询,它负责确定表之间以一种什么方式来关联,比如HASH_JOHN还是NESTEDLOOPS或者MERGEJOIN。这些因素直接决定SQL的执行效率,所以优化器是SQL执行的核心,它做出的执行计划好坏

3、,直接决定着SQL的执行效率。优化器介绍优化器介绍Oracle的优化器有两种:RBO(Rule-BasedOptimization):基于规则的优化器CBO(Cost-BasedOptimization):基于代价的优化器从Oracle10g开始,RBO已经被弃用,但是我们依然可以通过Hint方式来使用它。CBO的思路是让Oracle获取所有执行计划相关的信息,通过对这些信息做计算分析,最后得出一个代价最小的执行计划作为最终的执行计划。优化器介绍优化器介绍使用CBO时,需要注意如下几个方面:1、编写SQL语句时,不必考虑FROM子句后面的表或视图的顺序和WHERE子句后面的条件顺序;2、使用C

4、BO时,SQL语句FROM子句后面的表的个数不宜太多,因为CBO在选择表连接顺序时,会对FROM子句后面的表进行阶乘运算,选择最好的一个连接顺序。3、如果一个语句使用RBO的执行计划确实比CBO好,则可以通过hint机制,强制使用RBO。Hint机制可以参考这篇文章:http:/ PredicateInformation(identifiedbyoperationid):-2-filter(B.MGRISNOTNULL)4-access(A.EMPNO=B.MGR)Access:表示这个谓词条件的值将会影响数据的访问路劲(全表扫描还是索引)。要注意access,考虑谓词的条件,使用的访问路径是

5、否正确。Filter:表示谓词条件的值不会影响数据的访问路劲,只起过滤的作用。oracle的执行计划的执行计划2、看懂执行计划、看懂执行计划名词解释:recursivecalls递归调用dbblockgets从buffercache中读取的block的数量,当前请求的块数目consistentgets从buffercache中读取的undo数据的block的数量,这里的概念是在你处理你这个操作的时侯需要在一致性读状态上处理多个块physicalreads物理读,就是从磁盘上读取数据块的数量。其产生的主要原因是:1:在数据库高速缓存中不存在这些块。2:全表扫描3:磁盘排序oracle的执行计划的

6、执行计划2、看懂执行计划、看懂执行计划名词解释:redosizeDML生成的redo的大小sorts(memory)在内存执行的排序量sorts(disk)在磁盘执行的排序量1610bytessentviaSQL*Nettoclient从SQL*Net向客户端发送了1610字节的数据。519bytesreceivedviaSQL*Netfromclient客户端向SQL*Net发送了519字节的数据。oracle的执行计划的执行计划2、看懂执行计划、看懂执行计划如果在执行计划中有如下提示:Note-dynamicsamplingusedforthestatement这提示用户CBO当前使用的技

7、术,需要用户在分析计划时考虑这些因素。当出现这个提示,说明当前表使用了动态采样。我们从而推断这个表可能没有做过分析。oracle的执行计划的执行计划2、看懂执行计划、看懂执行计划这里会出现两种情况:(1)如果表没有做过分析,那么CBO可以通过动态采样的方式来获取分析数据,也可以或者正确的执行计划。(2)如果表分析过,但是分析信息过旧,这时CBO就不会在使用动态采样,而是使用这些旧的分析数据,从而可能导致错误的执行计划。oracle的执行计划的执行计划2、看懂执行计划、看懂执行计划访问表方式总结:(1)FullTableScan(FTS)全表扫描(2)IndexLookup索引扫描,包含如下五种

8、方式indexuniquescan-索引唯一扫描indexrangescan-索引局部扫描indexfullscan-索引全局扫描indexfastfullscan-索引快速全局扫描,不带orderby情况下常发生indexskipscan-索引跳跃扫描,where条件列是非索引的前提下常发生(3)rowid物理ID扫描,是最快的访问数据方式oracle的执行计划的执行计划1、在select/insert语句中尽量避免使用通配符(*)。对于一张表而言,通配符(*)意味着要进行全表遍历,对于数据量比较大的表就会给oracle增加很大的压力。2、尽量减少between的使用。3、能使用数字类型的字

9、段尽量使用数字类型,这将提高查询和连接的性能,并减少存储开销。引擎在处理查询和连接时会逐个比较字符串中的每个字符,对于数字类型只需要比较一次。4、尽量减少isnull和isnotnull的使用,在任何where子句中使用isnull和isnotnull的语句oracle内部优化器是不允许使用索引的。书写高效率书写高效率SQL语句建议语句建议5、优化where字句中的连接顺序。oracle采用自下而上的顺序解析where子句,根据这个原理,表之间的连接必须写在其他where条件之前,可以过滤掉最大数据记录的条件必须写在where字句的末尾。6、减少访问数据库的次数(使用绑定变量)。7、合理使用like关键字,如非必要尽量减少like关键字的使用。8、oracle对于相同的语句,如果大小写或空格不同,oracle也会认为是不同的,因此编写sql语句的时候注意语句的大小写保持一致,可以减少访问数据库的次数,实际上减少oracle的工作量,这对于多用户多次执行相同的语句非常有意义。书写高效率书写高效率SQL语句建议语句建议9、书写sql语句的时候不要在索引字段上进行任何操作,包括函数操作,例如:select*fromempwheresal*1210000;应该写成select*fromempwheresal10000

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论