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语句中经常出现问题,最简单也最容易忽视,希望大家后续继续增加