Chinaunix首页 | 论坛 | 博客
  • 博客访问: 719065
  • 博文数量: 191
  • 博客积分: 10987
  • 博客等级: 上将
  • 技术积分: 1925
  • 用 户 组: 普通用户
  • 注册时间: 2009-04-22 09:52
文章分类

全部博文(191)

文章存档

2014年(10)

2011年(11)

2010年(38)

2009年(132)

分类: Oracle

2010-01-27 18:49:18

一、SQL优化简介
二、SQL优化技巧,用于缩短执行查询所需要的时间
三、了解ORACLE优化器
四、如何比较查询的成本
五、如何将提示传给优化器
六、一些附加的优化工具
一、SQL优化简介
  宗旨:我们不但要写出能够执行的SQL语句,更要写出能够执行优良的SQL语句。
1.使用where 子句过滤行:
      where子句中应该避免使用函数,后果是增加了执行时间。
2.使用表的链接,而不是多个查询:
      查询中必须选择连接顺序,将行较少的表连接到后面。在查询中避免使用视图。
3.执行连接时使用完全限定的列引用。
  在多表查询中,每列包含表的别名,这样数据库就不需要去搜索每列的分属的表了,加快
  了查询速度。
   列包含表的别名,称完全限定列的引用。
4.使用CASE表达式,而不是多个查询。
5.添加表的索引
  一条成功的经验是:但单个查询检索的行数不大于表总行数的10%时,建立索引是有用的。
6.使用where子句,而不是having子句
  where子句用于过滤行
  having子句用于过滤组
  先使用where子句过滤出要分组的行,group by 再来分组。
  而不是使用group by 先分组,having再来过滤分组。
  两种都能执行,但前者效率更高。
7.使用union all 而不是union
  union all 找出所有的行
  union 找出表里不重复的行,这需要计算和比较,比较耗时。
8.使用exists 而不是in  在子查询中,exists比in所提供的性能要好的多,尽量使用exists,而  不使用in.
9.使用exists,而不是distinct .
  distinct在禁止重复行之前要排序检索到行。
10.使用绑定变量
   &变量
11. SQL优化工具:autotrace
    SQL优化工具autotrace是SQL*PLUS提供的一个可以跟踪SQL的执行计划,收集统计信息的工具
    autotrace工具的启用:
    1) 执行脚本utlxplan,创建plan_table表
      unix/linux环境: @?\rdbms\admin\utlxplan.sql
      windows环境:    @d:/oracle/product/database/RDBMS/admin/utlxplan.sql
    2)目的是共享plan_table表,创建公共同义词,并授权给public
      create public synonym plan_table for plan_table;
      grant all on plan_table to public;
    3)创建plustrace角色,运行脚本plustrce.sql
      @?\sqlplus\admin\plustrce.sql
      执行该脚本后,将自动创建用户plustrace及该角色的相关权限。
    4) 手工授权角色plustrace给public,所有的用户都能是使用autotrace功能了。
    5) 开启/关闭autotrace功能
       set autotrace on/off
    6) 开启查看底层基础表功能
       set autotrace trace explain
       set autotrace off(关闭)
阅读(735) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~