常用sql调优《一》

1. 使用索引,避免在索引列上使用计算.

2.用>=替代> <=替代<

3.用UNION替换OR (适用于索引列)

4.用IN来替换OR 或者 用EXISTS替代IN

5 用WHERE替代ORDER BY .ORDER BY 子句只在两种严格的条件下使用索引.
ORDER BY中所有的列必须包含在相同的索引中并保持在索引中的排列顺序. ORDER BY中所有的列必须定义为非空.

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

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

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

9. 慎用游标。游标是把结果集放在服务器内存,并通过循环一条一条处理记录,对数据库资源(特别是内存和锁资源)的消耗是非常大。尽量使用显式的游标(CURSORs) 。使用隐式的游标,将会执行两次操作.

10.使用较大的BUFFER(比如10MB , 10,240,000)可以提高EXPORT和IMPORT的速度

11.使用表的别名(Alias) 当在SQL语句中连接多个表时, 请使用表的别名并把别名前缀于每个Column上.这样一来,就可以减少解析的时间并减少那些由Column歧义引起的语法错误.

12.通过内部函数提高SQL效率.

13.减少对表的查询  尤其是在含有子查询的SQL语句中,要特别注意减少对表的查询

14.只要有可能,在程序中尽量多使用COMMIT, 这样程序的性能得到提高,需求也会因为COMMIT所释放的资源而减少:

15.删除表数据时用TRUNCATE替代DELETE,可以释放物理空间

16.最高效的删除重复记录方法 ( 因为使用了ROWID)
DELETE FROM EMP E
WHERE E.ROWID >; (SELECT MIN(X.ROWID) 
                   FROM EMP X
                   WHERE X.EMP_NO = E.EMP_NO);

17. 避免使用大字段

18.count(*) 比count(1)稍快 , 当然如果可以通过索引检索,对索引列的计数仍旧是最快的.19.用Where子句替换HAVING子句 避免使用HAVING子句, HAVING 只会在检索出所有记录之后才对结果集进行过滤

19. 避免使用like '*' ,避免使用 is null  或者是

20.

注:

A、程序员注意、关心各表的数据量。

B、 编码过程和单元测试过程尽量用数据量较大的数据库测试,最好能用实际数据测试。

C、 每个SQL语句尽量简单

D、不要频繁更新有触发器的表的数据

E、 注意数据库函数的限制以及其性能

 

F、使用TKPROF 工具来查询SQL性能状态

 

G、用EXPLAIN PLAN 分析SQL语句

posted @ 2015-01-26 17:03  骑士归来  阅读(183)  评论(0编辑  收藏  举报