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
9. 等式比较和范围比较
当WHERE子句中有索引列, ORACLE不能合并它们,ORACLE将用范围比较.
先进行等式比较
10. 不明确的索引等级
当ORACLE无法判断索引的等级高低差别,优化器将只使用一个索引,它就是在WHERE子句中被列在最前面的.
11. 自动选择索引
如果表中有两个以上(包括两个)索引,其中有一个唯一性索引,而其他是非唯一性.
在这种情况下,ORACLE将使用唯一性索引而完全忽略非唯一性索引.
12. 用>=替代>
13. 总是使用索引的第一个列
如果索引是建立在多个列上, 只有在它的第一个列(leading column)被where子句引用时,优化器才会选择使用该索引.
14.‘!=' 将不使用索引
‘||'是字符连接函数. 就象其他函数那样, 停用了索引.
‘+'是数学函数. 就象其他数学函数那样, 停用了索引.
刚开通博客园,此篇里面的基本上都是我们使用sql语句中经常出现问题,最简单也最容易忽视,希望大家后续继续增加