博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Oracle性能优化随笔
阅读量:5088 次
发布时间:2019-06-13

本文共 1292 字,大约阅读时间需要 4 分钟。

1,from的最右边放置数据量最少的表,也叫基础表

2,where的写法
ORACLE采用自下而上的顺序解析WHERE子句,
根据这个原理,表之间的连接必须写在其他WHERE条件之前,
那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾.

3. SELECT子句中避免使用 ‘ * ‘

4.for的方式循环可能能提高游标的效率(有待检查)

5. 使用DECODE函G数来减少处理时间

使用DECODE函数可以避免重复扫描相同记录或重复连接相同的表.
例如:

SELECT COUNT(*),SUM(SAL)

FROM EMP

WHERE DEPT_NO = 0020

AND ENAME LIKE ‘SMITH%';

SELECT COUNT(*),SUM(SAL)

FROM EMP

WHERE DEPT_NO = 0030

AND ENAME LIKE ‘SMITH%';

你可以用DECODE函数高效地得到相同结果
SELECT COUNT(DECODE(DEPT_NO,0020,'X',NULL)) D0020_COUNT,

COUNT(DECODE(DEPT_NO,0030,'X',NULL)) D0030_COUNT,

SUM(DECODE(DEPT_NO,0020,SAL,NULL)) D0020_SAL,

SUM(DECODE(DEPT_NO,0030,SAL,NULL)) D0030_SAL

FROM EMP WHERE ENAME LIKE ‘SMITH%';

类似的,DECODE函数也可以运用于GROUP BY 和ORDER BY子句中.

 

6.用EXISTS替代IN

7.NOT EXISTS替换NOT IN

8.定期的重构索引是有必要的.

ALTER INDEX <INDEXNAME> REBUILD <TABLESPACENAME>

9. 等式比较和范围比较
当WHERE子句中有索引列, ORACLE不能合并它们,ORACLE将用范围比较.
先进行等式比较

 

10. 不明确的索引等级
当ORACLE无法判断索引的等级高低差别,优化器将只使用一个索引,它就是在WHERE子句中被列在最前面的.

11. 自动选择索引

如果表中有两个以上(包括两个)索引,其中有一个唯一性索引,而其他是非唯一性.
在这种情况下,ORACLE将使用唯一性索引而完全忽略非唯一性索引.  

12. 用>=替代>

13. 总是使用索引的第一个列
如果索引是建立在多个列上, 只有在它的第一个列(leading column)被where子句引用时,优化器才会选择使用该索引.

14.‘!=' 将不使用索引
‘||'是字符连接函数. 就象其他函数那样, 停用了索引.
‘+'是数学函数. 就象其他数学函数那样, 停用了索引.

刚开通博客园,此篇里面的基本上都是我们使用sql语句中经常出现问题,最简单也最容易忽视,希望大家后续继续增加

转载于:https://www.cnblogs.com/charmi/archive/2013/01/07/2848854.html

你可能感兴趣的文章
JavaScript的迭代函数与迭代函数的实现
查看>>
一步步教你学会browserify
查看>>
Jmeter入门实例
查看>>
亲近用户—回归本质
查看>>
中文脏话识别的解决方案
查看>>
CSS之不常用但重要的样式总结
查看>>
Python编译错误总结
查看>>
URL编码与解码
查看>>
日常开发时遇到的一些坑(三)
查看>>
Eclipse 安装SVN插件
查看>>
深度学习
查看>>
TCP粘包问题及解决方案
查看>>
构建之法阅读笔记02
查看>>
添加按钮
查看>>
移动端页面开发适配 rem布局原理
查看>>
Ajax中文乱码问题解决方法(服务器端用servlet)
查看>>
会计电算化常考题目一
查看>>
阿里云服务器CentOS6.9安装Mysql
查看>>
剑指offer系列6:数值的整数次方
查看>>
js 过滤敏感词
查看>>