一,对数据库性能的优化规则:
1,减少数据访问(索引)
2,返回更少的数据(分页查询,返回需要的字段)
3,减少交互次数 (存储过程,优化业务逻辑)
4,减少服务器cpu开销(使用绑定变量,合理使用排序,减少比较操作 ,大量复杂运算在客户端处理)
5,使用更多的资源(客户端多进程并行访问, 数据库并行处理)
二, 针对sql语句
1,oracle 的解析器从右到左顺序处理from子句中的表名,因此多表情况下选择记录条数最少的表为基础表放在最右边,当3个以上的表做连结查询,选择交叉表为基础表。
2,oracle自上而下顺序解析where子句,过滤最大数量记录的条件应该写在where子句的末尾。
3,decode 函数可以避免重复扫描相同记录或重复连结相同的表。
4,可能的话用union-all 替换union
5,用truncate 替代delete
6,用大写写sql(数据库会将小写转换为大写再解析)
7,where子句替换having子句
8,优化group by (通过将不需要的记录在group by 之前去掉。)
9,对索引使用or将造成全表扫描。
10,避免不必要的order by
11,慎用函数(select语句的where条件中和选择列中慎用函数,因为查询多少条数据,函数就会执行多少次。因为每个函数都可能右多条sql语句,每个sql语句都解析,执行消耗资源多。
12,函数最好改写成子查询
13,尽量减少函数的执行次数(放在外面)
14,排序是非常消耗db服务器资源(distinct ,union,order by,group by)
15,如果右嵌套循环,数据量大的处理放在外层。
16,不要再sql中进行复杂的运算或业务逻辑。
17,不要再长字符串上建立索引。
18,where条件中使用数学表达式将无法使用索引。
19,尽量少用视图,视图设计到物理表映射加工,效率比较低。
20,count(*) 会统计值为null的行(可用), count(列名)不会。
21,对于分页sql,如果带有order by 语句,应确保排序的唯一性。