sql 优化

一、优化器的基础知识
性能管理
性能问题
调整的方法
SQL优化机制
应用的调整
SQL语句的处理
                共享sql区域
                sql语句的处理阶段
                共享游标
                sql编码标准


SGA system glabal area
sql共享的三个条件:
1、当前被执行的语句和共享池的语句必须完全相同(包括大小写、空格、换行等)
2、两个语句所指的对象必须完全相同(同义词与表是不同的对象)
3、两个sql语句必须使用相同的名字的绑定变量(bind variables)

sql的处理过程
创建游标-分析语句-描述查询的结果集-定义查询的输出数据-绑定变量-并行执行语句-运行语句-取查询出来的行-关闭游标

使用绑定变量解决重编译问题
使用绑定变量的注意事项:
1不要使用数据库级的变量来绑定参数
2有些带><的语句绑定变量后,会导致优化器无法正确使用索引。

SQL TUNNING TIP
1.不要让oracle做得太多
        1)避免复杂的多表关联,会导致很难优化。
        2)避免使用‘*’,输入要查询的列名,‘*’会转变成列名,通过查询数据字典来完成,耗时
        3)避免使用耗费资源的操作如 DISTINCT, UNION, MINUS, INSERTSECT, ORDER BY
                        解决方法:使用EXISTS 替换 DISTINCT, 使用UNIONALL 替换 UNION
2、给优化器更明确的命令
        1)自动选择索引,如果是组合索引,只有在第一个列被where子句引用的时候,优化器才会选择该索引。
        2)避免在索引上使用函数。
        3)避免使用前置通配符
        4)避免在索引列上使用not
        5)避免在索引列上使用is null, is not null
        6)避免出现索引列自动转换。
        7)在查询时尽量少用格式转换
3、减少访问次数
        1)减少数据库的访问次数
        2)使用DECODE来减少处理时间。
        3)减少对表的查询
4、细节上的影响
        1)where子句中的连接顺序
                        oracle自下而上解析where子句,返回行数少的表放后面。
        2)where子句中最好不要使用函数表达式,如果要使用的话,最好统一使用相同的函数或者表达式。
        3)任何在order by中的非索引项,都会降低查询速度。可以为非索引项,建立新的索引。避免在order by中使用表达式
        4)对于联接列“||”,oracle是不会使用索引的
        5)“%”在词首出现,oracle不会使用索引
        6)用where子句代替having子句,having只会在检索出所有的记录后,才会对记录进行过滤。where>group>having
        7)用not exists代替not in。NOT IN子句将执行一个内部的排序与合并。NOT EXISTS可以高效的利用索引。
 5、用索引提高效率。大型表中使用索引特别有效率。当然索引也是有代价的,需要空间来存储,记录被修改的时候,索引需要维护。
        1)避免在索引上使用计算
        2)用>=代替>
        3)通过>=和<=,避免使用not和<>
6、如果有其他办法不要使用子查询
7、外部连接(+)代替NOT IN
8、尽量多使用COMMIT;使用commit来释放事务所占的资源(回滚段上用于恢复数据的信息、被程序语句获得的锁、redo log buffer中的空间,oracle为了管理上述资源的内部花费)。
9、用truncate 代替 delete。delete会存放被删除的消息,以便回滚,truncate不会保存被删除的数据。
10、计算记录条数,count(*)比count(1)快,通过索引检索,对索引列的计数是最快的。
11、字符型字段的引号,如果一个字段是char型,而且创建有索引,但在where条件中忘记加引号,就不会用到索引。
12、优化export和import,使用比较大的BUFFER

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值