数据库培训高效率sql语句基础汇编.pptx

  1. 1、本文档共43页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据库培训高效率sql语句基础汇编

Oracle数据库培训 高效率SQL语句基础 --张林 一个高效率的数据库系统是从两个方面来评价的: 响应时间和吞吐量。? 在应用系统开发阶段,由于开发库上的数据比较少,在SQL语句的编写上感觉不出各种写法的性能差异,在将应用系统提交实际应用后,随着数据库中数据的增加,系统的响应速度就会成为最需要解决的主要问题之一。?缩短系统的响应时间,增加操作的并发度,可以提高系统的吞吐量。 要缩短系统的响应时间,就需要可以高效率执行的SQL语句。 引言 一、优化器介绍 二、高效率SQL基础 三、oracle的执行计划 四、书写高效率SQL语句建议 目录 Oracle?数据库中优化器(Optimizer)是SQL分析和执行的优化工具,它负责指定SQL的执行计划,也就是它负责保证SQL执行的效率最高,比如优化器决定Oracle?以什么样的方式来访问数据,是全表扫描(Full Table Scan),索引范围扫描(Index Range Scan)还是全索引快速扫描(INDEX Fast Full Scan:INDEX_FFS);对于表关联查询,它负责确定表之间以一种什么方式来关联,比如HASH_JOHN还是NESTED LOOPS?或者MERGE JOIN。?这些因素直接决定SQL的执行效率,所以优化器是SQL?执行的核心,它做出的执行计划好坏,直接决定着SQL的执行效率。 优化器介绍 Oracle?的优化器有两种: ???????????????????RBO(Rule-Based Optimization):?基于规则的优化器 ???????????????????CBO(Cost-Based Optimization):?基于代价的优化器 ?????????从Oracle 10g开始,RBO?已经被弃用,但是我们依然可以通过Hint?方式来使用它。 CBO的思路是让Oracle?获取所有执行计划相关的信息,通过对这些信息做计算分析,最后得出一个代价最小的执行计划作为最终的执行计划。 优化器介绍 使用CBO 时,需要注意如下几个方面: 1、编写SQL语句时,不必考虑FROM 子句后面的表或视图的顺序和WHERE 子句后面的条件顺序; 2、使用CBO 时,SQL语句 FROM 子句后面的表的个数不宜太多,因为CBO在选择表连接顺序时,会对FROM 子句后面的表进行阶乘运算,选择最好的一个连接顺序。 3、如果一个语句使用 RBO的执行计划确实比CBO 好,则可以通过hint机制,强制使用RBO。 Hint机制可以参考这篇文章:/blog/1478465 优化器介绍 理解索引 大多数情况下,数据库使用索引来检索表,优化器根据用户定义的索引来提高执行性能。但是,如果在SQL语句的where子句中写的SQL代码不合理,就会造成优化器忽略索引而采用全表扫描,而这种SQL语句就是所谓的劣质SQL语句。在编写SQL语句时需要了解优化器根据何种原则来使用索引,这将有助于写出高性能的SQL语句。 高效率SQL基础 1、条件中包含NULL值(IS NULL 与 IS NOT NULL) 以NULL值做条件时,将无法使用包含NULL值的列上的索引。即使索引有多列这样的情况下,只要这些列中有一列含有null,该列就会从索引中排除。也就是说如果某列存在空值,在使用NULL值做条件时,即使对该列建索引也不会提高性能。 理解索引-常见问题分析 2、列的连接 列被包含到表达式中导致不能使用索引。?对于有连接的列,即使最后的联接值为一个静态值,优化器是不会使用索引的。 例: 假定有一个职工表(employee),对于一个职工的姓和名分成两列存放 (FIRST_NAME)和(LAST_NAME),现在要查询一个叫Bill?Cliton的职工。 下面是一个采用联接查询的SQL语句: select?*?from?employee?where?first_name||’ ’||last_name?=‘Bill?Cliton’;?? 改进方法: select?*?from?employee?where?first_name?=?‘Bill’?and?last_name?=?‘Cliton’; 理解索引-常见问题分析 3、带通配符(%)的like语句 select?*?from?employee?where?last_name?like?%cliton%;??? 由于通配符(%)在搜寻词首出现,所以数据库将不使用last_name的索引。在很多情况下可能无法避免这种情况,但是一定要心中有数,通配符如此使用会降低查询速度。??当通配符出现在字符串其他位置时,优化器就能利用索引。在下面的查询中索引得到了使用

文档评论(0)

jiayou10 + 关注
实名认证
内容提供者

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

版权声明书
用户编号:8133070117000003

1亿VIP精品文档

相关文档