数据库培训高效率sql语句基础.pptxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Oracle数据库培训;一个高效率的数据库系统是从两个方面来评价的: 响应时间和吞吐量。? 在应用系统开发阶段,由于开发库上的数据比较少,在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语句。;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的索引。在很多情况下可能无法避免这种情况,但是一定要心中有数,通配符如此使用会降低查询速度。??当通配符出现在字符串其他位置时,优化器就能利用索引。在下面的查询中索引得到了使用:??select?*?from?employee?where?last_name?like?c%;;4、 order by语句 order by语句决定了数据库如何将返回的查询结果排序。order?by语句对要排序的列没有什么特

文档评论(0)

老师驿站 + 关注
官方认证
文档贡献者

专业做教案,有问题私聊我

认证主体莲池区卓方网络服务部
IP属地河北
统一社会信用代码/组织机构代码
92130606MA0GFXTU34

1亿VIP精品文档

相关文档