《Oracle数据库应用与开发》第10章[指导学习]理论课.pptVIP

《Oracle数据库应用与开发》第10章[指导学习]理论课.ppt

  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文档。上传文档
查看更多
6-1合理使用索引 创建索引的根本目的是:提高查询效率 使用原则如下: 1.在条件表达式中经常用到的不同值较多的列上建立索引 2.在不同值少的列上不要创建索引或位图索引. 比如:在员工表的[性别]列上只有“男”或者“女”两个不同值,如果建立索引,不但不会提高查询效率,反而会降低更新速度 3.在经常进行连接,但是没有指定为外键的列上建立索引 6-1合理使用索引 在频繁进行排序或分组的列上建立索引 如果待排序的列有多个,可以建立组合索引 如:order by D,E 那要注意:在建立索引时 D列和E列和排序后面的顺序要相同 如果条件表达式中经常对某个列应用某个函数后指定查询条件,则应建立函数索引 6-1合理使用索引 下面情况的SQL,不会用到列上的索引,应尽量避免使用: 存在数据类型的隐形转换时 列上有数学运算时 在索引上只有sal的值,没有sal*2的值 6-1合理使用索引 使用不等于()运算时 使用substr字符串函数时 ‘%’通配符在第一个字符时 字符串连接( || )时 6-2避免或简化排序 应当简化或避免对大型表进行重复的排序 以下是需要排序的情况 SQL中包含Group By子句 SQL中包含Order By子句 SQL中包含Distinct子句 SQL中包含Minus或Union子句 in子句中的SQL子查询 6-2避免或简化排序 以下情况不能有效地利用索引 待排序列没有全部建立索引 例如:order by D,E 而在表中只在D列上创建了索引 Group by 或者 Order by 子句中列的顺序与索引的列的顺序不同 Create index i_emp on emp(empno,ename) Order by ename,empno 排序的列来自不同的表(索引不能跨表) 为了避免不必要的排序,就要正确地增建索引,合理地 合并数据库表。如果排序不可避免,那么应当试图简化 它,如缩小排序的列的范围等 6-3消除对大表的扫描 在连接查询中,对表的顺序存取可能对查询效率产生致命的影响。避免这种情况的主要方法就是对连接的列进行索引。例如有两个表,学生表(学号、姓名、年龄…)和选课表(学号、课程号、成绩)。如果两个表要做连接,就要在”学号”这个连接字段上建立索引。 6-3消除对大表的扫描 使用并集来避免顺序存取。尽管在所有的检查列上都有索引,但某些形式的 where 子句强迫数据库使用顺序存取。例如 尽管我们在B和C列上都建立了索引,但是在上面语句中,优化器还是使用顺序存取方式扫描整个表。因为这个语句要检索的是分离的行的集合,可改为如下语句 6-4避免困难的通配符匹配 复杂的通配可能导致耗时的查询。例如 即使在zipcode字段上建立了索引,在这种情况下也还是采用顺序扫描的方式。应改成 6-5调整子查询的性能 非关联子查询 非关联子查询时子查询只会执行一次,而且结果集是已经排 序完毕的,并保存在一个Oracle的临时段中,其中的每一个 记录在返回时都会被父查询所引用。在子查询返回大量记录 的情况下,将这些结果集排序,以及将临时数据段进行排序 会增加大量的系统开销。 select emp_name from emp_number where emp_id in (select emp_id from emp_func); 6-5调整子查询的性能 关联子查询 对返回到父查询的记录来说,子查询会每行执行一次。因此必须保证子查询尽可能用到索引。关联子查询的系统开销更高。 select emp_name from emp_number where emp_id in (select emp_id from emp_func where emp_number.emp_id = emp_func.emp_id); 查询嵌套的层次越多,效率越低,因此应当尽量避免子查 询。如果子查询不可避免,那以要在子查询中过滤掉尽可能 多的行。 6-6EXISTS和IN运算符 带IN

文档评论(0)

好文精选 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档