- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
2003-09 ORACLE SQL性能优化 Oracle SQL性能优化 SQL语句执行步骤 选用适合的Oracle优化器 访问Table的方式 全表扫描 全表扫描就是顺序地访问表中每条记录,ORACLE采用一次读入多个数据块(database block)的方式优化全表扫描 通过ROWID访问表 ROWID包含了表中记录的物理位置信息,ORACLE采用索引实现了数据和存放数据的物理位置(ROWID)之间的联系,通常索引提供了快速访问ROWID的方法,因此那些基于索引列的查询就可以得到性能上的提高 共享 SQL 语句 Oracle提供对执行过的SQL语句进行高速缓冲的机制。被解析过并且确定了执行路径的SQL语句存放在SGA的共享池中。 Oracle执行一个SQL语句之前每次先从SGA共享池中查找是否有缓冲的SQL语句,如果有则直接执行该SQL语句。 可以通过适当调整SGA共享池大小来达到提高Oracle执行性能的目的。 选择最有效率的表名顺序(1) ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,因此FROM子句中写在最后的表(基础表 driving table)将被最先处理 当ORACLE处理多个表时,会运用排序及合并的方式连接它们。首先,扫描第一个表(FROM子句中最后的那个表)并对记录进行派序,然后扫描第二个表(FROM子句中最后第二个表),最后将所有从第二个表中检索出的记录与第一个表中合适记录进行合并. 只在基于规则的优化器中有效 选择最有效率的表名顺序(2) 表 TAB1 16,384 条记录 表 TAB2 1 条记录 选择TAB2作为基础表 (最好的方法) select count(*) from tab1,tab2 执行时间0.96秒 选择TAB2作为基础表 (不佳的方法) select count(*) from tab2,tab1 执行时间26.09秒 选择最有效率的表名顺序(3) Where子句中的连接顺序 (1) Where子句中的连接顺序 (2) SELECT子句中避免使用“*” Oracle在解析SQL语句的时候,对于“*”将通过查询数据库字典来将其转换成对应的列名。 如果在Select子句中需要列出所有的Column时,建议列出所有的Column名称,而不是简单的用“*”来替代,这样可以减少多于的数据库查询开销。 减少访问数据库的次数 当执行每条SQL语句时, ORACLE在内部执行了许多工作: 解析SQL语句 估算索引的利用率 绑定变量 读数据块等等 由此可见, 减少访问数据库的次数 , 就能实际上减少ORACLE的工作量. 整个简单无关联的数据库访问 如果有几个简单的数据库查询语句,你可以把它们整合到一个查询中(即使它们之间没有关系),以减少多于的数据库IO开销 虽然采取这种方法,效率得到提高,但是程序的可读性大大降低,所以还是要权衡之间的利弊 使用Truncate而非Delete Delete表中记录的时候,Oracle会在Rollback段中保存删除信息以备恢复。Truncate删除表中记录的时候不保存删除信息,不能恢复。因此Truncate删除记录比Delete快,而且占用资源少。 删除表中记录的时候,如果不需要恢复的情况之下应该尽量使用Truncate而不是Delete。 Truncate仅适用于删除全表的记录。 尽量多使用COMMIT 计算记录条数 Select count(*) from tablename; Select count(1) from tablename; Select max(rownum) from tablename; 一般认为,在没有索引的情况之下,第一种方式最快。 如果有索引列,使用索引列当然最快。 用Where子句替换Having子句 减少对表的查询操作(1) 减少对表的查询操作(2) 使用表的别名(Alias) 用EXISTS替代IN(1) 用EXISTS替代IN(2) 用NOT EXISTS替代NOT IN (1) 用NOT EXISTS替代NOT IN (2) 用表连接替换EXISTS 用EXISTS替换DISTINCT (1) 当提交一个包含对多表信息(比如部门表和雇员表)的查询时,避免在SELECT子句中使用DISTINCT。 一般可以考虑用EXIST替换。 EXISTS 使查询更为迅速,因为RDBMS核心模块将在子查询的条件一旦满足后,立刻返回结果。 用EXISTS替换DISTINCT (2) 识别低效的SQL语句 用Explain Plan分析SQL语句 SQL PLUS的TRAC
您可能关注的文档
最近下载
- 2025电动航空器电推进系统动力电机技术规范.docx VIP
- DB37╱T 3655-2019 化工园区大气环境风险监控预警系统技术指南(试行).pdf VIP
- 百灵达FLOW-8快速使用说明书.pptx VIP
- 化工园区危险品运输车辆停车场建设标准.pdf VIP
- 《党政机关厉行节约反对浪费条例》专题党课PPT课件模板.pptx VIP
- T/HGJ 10600-2019 烧碱装置安全设计标准.docx VIP
- 最新清晰版ISO50001(中word版).docx VIP
- 临床医学 《门静脉高压症》教学课件.ppt VIP
- 最新:机械通气患者转运课件.pptx VIP
- (高清版)DB44∕T 2598-2024 《省级体育社会团体建设规范》.pdf VIP
文档评论(0)