Windows应用程序开发教程 C#版 国家级骨干高职院校中央财政支持的重点建设课程建设成果 教学课件 作者 董久敏 06专题六 数据库的优化.ppt

Windows应用程序开发教程 C#版 国家级骨干高职院校中央财政支持的重点建设课程建设成果 教学课件 作者 董久敏 06专题六 数据库的优化.ppt

  1. 1、本文档共66页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Oracle SQL 优化初步 (参考资料) 2011/11/06 第一部分 基础知识 Oracle优化基础 影响数据库系统性能的要素: 主机CPU,RAM,存储系统; OS参数配置,ORACLE参数配置; 应用方面:数据库设计及SQL编程的质量 性能问题的木桶效应 发现并解决系统性能的瓶颈 一个性能优秀的应用系统需要: 良好的硬件配置;正确合理的数据库及中间件参数配置;合理的数据库设计;良好的sql编程;运行期的性能优化 SQL Tunning的重点 Sql: insert,update,delete,select; 主要关注的是select 关注的是:如何用最小的硬件资源消耗、最少的响应时间定位数据位置 Sql 处理过程 SQL PARSE与共享SQL语句 为了不重复解析相同的SQL语句,在第一次解析之后, ORACLE将SQL语句存放在内存中.这块位于系统全局区域SGA(system global area)的共享池(shared buffer pool)中的内存可以被所有的数据库用户共享. 因此,当你执行一个SQL语句(有时被称为一个游标)时,如果它和之前的执行过的语句完全相同, ORACLE就能很快获得已经被解析的语句以及最好的执行路径. ORACLE的这个功能大大地提高了SQL的执行性能并节省了内存的使用. shared buffer pool在允许范围内尽量设大,缓存更多的sql语句. 当你向ORACLE 提交一个SQL语句,ORACLE会首先在这块内存中查找相同的语句. 严格匹配, (包括空格,换行,bind variables等). 为什么要bind variables? 字符级的比较: SELECT * FROM USER_FILES WHERE USER_NO = ; 与 SELECT * FROM USER_FILES WHERE USER_NO = ; 检查: select name,executions from v$db_object_cache where name like select * from user_files% SQL优化的一般性原则 目标: 减少服务器资源消耗(主要是磁盘IO); 设计方面: 尽量依赖oracle的优化器,并为其提供条件; 合适的索引,索引的双重效应,列的选择性; 编码方面: 利用索引,避免大表FULL TABLE SCAN; 合理使用临时表; 避免写过于复杂的sql,不一定非要一个sql解决问题; 在不影响业务的前提下减小事务的粒度; 使用光标来降低复杂度 查询方案类比 Oracle优化器 选用适合的ORACLE优化器,共有3种: a. RULE (基于规则) -- RBO(Rule-Based Opt) b. COST (基于成本) -- CBO(Cost-Based Opt) c. CHOOSE (选择性) –RBO CBO 混合 如何配置ORACLE的优化器 设置缺省的优化器,可以通过对init.ora文件中OPTIMIZER_MODE参数的各种声明,如RULE,COST, CHOOSE, ALL_ROWS, FIRST_ROWS . 你当然也在SQL句级或是会话(session)级对其进行覆盖. 可以通过show parameter OPTIMIZER_MODE查看 为了使用基于成本的优化器(CBO, Cost-Based Optimizer) , 你必须经常运行analyze 命令,以增加数据库中的对象统计信息(object statistics)的准确性. 如果数据库的优化器模式设置为选择性(CHOOSE),那么实际的优化器模式将和是否运行过analyze命令有关. 如果table已经被analyze过, 优化器模式将自动成为CBO , 反之,数据库将采用RULE形式的优化器. 在缺省情况下,ORACLE采用CHOOSE优化器, 为了避免那些不必要的全表扫描(full table scan) , 你必须尽量避免使用CHOOSE优化器,而直接采用基于规则或者基于成本的优化器. RBO的规则 从右到左处理表 自下而上解析where条件 RBO表名顺序 ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,因此FROM子句中写在最后的表(基础表 driving table)将被最先处理. 在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表. 当ORACLE处理多个表时, 会运用排序及合并的方式连接它们.首先,扫描第一个表(FROM子句中最后的那个表)并对记录进行派序,然后扫描第二个表(FROM子句中最后第二个表),最后将所有从第二个表中检索出的记录与第一个表中合适记录

您可能关注的文档

文档评论(0)

开心农场 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档