Oracle指导学习

Oracle指导学习

ID:43929160

大小:698.50 KB

页数:21页

时间:2019-10-17

Oracle指导学习_第1页
Oracle指导学习_第2页
Oracle指导学习_第3页
Oracle指导学习_第4页
Oracle指导学习_第5页
资源描述:

《Oracle指导学习》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、指导学习SQL查询性能优化6-1合理使用索引创建索引的根本目的是:提高查询效率使用原则如下:1>.在条件表达式中经常用到的不同值较多的列上建立索引2>.在不同值少的列上不要创建索引或位图索引.比如:在员工表的[性别]列上只有“男”或者“女”两个不同值,如果建立索引,不但不会提高查询效率,反而会降低更新速度3>.在经常进行连接,但是没有指定为外键的列上建立索引26-1合理使用索引在频繁进行排序或分组的列上建立索引如果待排序的列有多个,可以建立组合索引如:orderbyD,E那要注意:在建立索引时D列和E列和排序后面的顺序要相同如果条件表达式中经常对某个列应用某个函数后指定查询条件,则应建

2、立函数索引36-1合理使用索引下面情况的SQL,不会用到列上的索引,应尽量避免使用:存在数据类型的隐形转换时列上有数学运算时在索引上只有sal的值,没有sal*2的值Select*fromempwhereempno=‘123’;Select*fromempwheresal*2<1000;Select*fromempwheresal<1000/2;46-1合理使用索引使用不等于(<>)运算时使用substr字符串函数时‘%’通配符在第一个字符时字符串连接(

3、

4、)时Select*fromempwheredeptno<>10;Select*fromempwheresubstr(ename,1

5、,3)=‘SMI’;Select*fromempwhereenamelike’%th’;Select*fromempwhereename

6、

7、‘abc’=‘SMITHabc’;56-2避免或简化排序应当简化或避免对大型表进行重复的排序以下是需要排序的情况SQL中包含GroupBy子句SQL中包含OrderBy子句SQL中包含Distinct子句SQL中包含Minus或Union子句in子句中的SQL子查询66-2避免或简化排序以下情况不能有效地利用索引待排序列没有全部建立索引例如:orderbyD,E而在表中只在D列上创建了索引Groupby或者Orderby子句中列的顺序与索引的列的顺

8、序不同Createindexi_emponemp(empno,ename)Orderbyename,empno排序的列来自不同的表(索引不能跨表)为了避免不必要的排序,就要正确地增建索引,合理地合并数据库表。如果排序不可避免,那么应当试图简化它,如缩小排序的列的范围等76-3消除对大表的扫描在连接查询中,对表的顺序存取可能对查询效率产生致命的影响。避免这种情况的主要方法就是对连接的列进行索引。例如有两个表,学生表(学号、姓名、年龄…)和选课表(学号、课程号、成绩)。如果两个表要做连接,就要在”学号”这个连接字段上建立索引。86-3消除对大表的扫描使用并集来避免顺序存取。尽管在所有的检查

9、列上都有索引,但某些形式的where子句强迫数据库使用顺序存取。例如尽管我们在B和C列上都建立了索引,但是在上面语句中,优化器还是使用顺序存取方式扫描整个表。因为这个语句要检索的是分离的行的集合,可改为如下语句Select*fromabcwherea>10orb<10;Select*fromabcwherea>10UnionSelect*fromabcwhereb<1096-4避免困难的通配符匹配复杂的通配可能导致耗时的查询。例如即使在zipcode字段上建立了索引,在这种情况下也还是采用顺序扫描的方式。应改成Select*fromcustomerwherezipcodelike’98

10、___’;Select*fromcustomerwherezipcode>=’98000’andzipcode<‘99000’106-5调整子查询的性能非关联子查询非关联子查询时子查询只会执行一次,而且结果集是已经排序完毕的,并保存在一个Oracle的临时段中,其中的每一个记录在返回时都会被父查询所引用。在子查询返回大量记录的情况下,将这些结果集排序,以及将临时数据段进行排序会增加大量的系统开销。selectemp_namefromemp_numberwhereemp_idin(selectemp_idfromemp_func);116-5调整子查询的性能关联子查询对返回到父查询的记录

11、来说,子查询会每行执行一次。因此必须保证子查询尽可能用到索引。关联子查询的系统开销更高。selectemp_namefromemp_numberwhereemp_idin(selectemp_idfromemp_funcwhereemp_number.emp_id=emp_func.emp_id);查询嵌套的层次越多,效率越低,因此应当尽量避免子查询。如果子查询不可避免,那以要在子查询中过滤掉尽可能多的行。126-6EXISTS和IN运算符带I

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。