1.        不同表的同一字段要有相同的类型,比如t_audit_report表的claim_idvarchar2类型,而t_claim表的该字段为number型,这样会导致2个表关联使用claim_id关联的时候,使用不了索引。

2.        尽量使用UNION ALL,而不是UNION

3.        避免写过于复杂的SQL,不一定要一个SQL解决问题,可以考虑使用多个小的SQL语句来实现同样的功能。

4.        查询尽量用确定的列名,少用*

5.        in子句替换成exists子句

6.        使用NOT EXISTS替代NOT IN

7.        外键需要加索引,否则删除父表的记录时会导致子表上的全表锁。

8.        删除不必要的索引

9.        添加冗余字段,减少大表的关联

10.   避免在索引列上使用函数,如果无法避免,可以添加函数索引,在写SQL语句时,需要使用一致的函数。比如系统中对t_user表的字段account有的地方使用lower函数,有的地方却使用upper函数。

11.   如果明细查询语句很复杂,统计语句不要重用明细查询语句。因为统计语句不需要查询详细信息,可以去掉很多表的关联。

12.   如下情况下,Oracle不会使用索引,我们应该避免

l  在索引列上使用前置通配符

l  在索引列上使用NOT

l  在索引列上使用IS NULLIS NOT NULL

l  索引列的类型自动转换

其他

1.        在写代码时,注重性能的同时不要忽略可读性.

2.        是否考虑过修改需求来提升性能?

3.        是否考虑过修改程序的设计来提高性能?