1, 绑定变量
2, SQL内存共享
3, 注意回滚空间,适当分批commit
4, 减少SQL执行频率,例如字典数据放入内存区缓存
5, 注意JOB进程的扫表频率,如果最后一次扫表,表数据已经非常少了,线程注意优化,让线程休眠几秒。减少对表达访问
6, 减少对表达访问,注意子查询在update中的使用,原则上就是一条:精简的SQL。
7, 回滚的另一个注意,truncate,delete。如果不需要回滚,建议用truncate。
8, In,exists:in用在枚举数据少时候快,而exists用在查询表数据大时候快。Not in,not exists会全表扫描。
9, Is null,is not null都会全表扫描
10, Where条件中,索引屏蔽情况要避免
11, 注意数据类型的隐性转换,特别是索引列上隐性转换导致索引失效。
12, 强制执行计划,HINTS使用
13, Rowid的巧妙使用。自表查询
14, 索引列尽量不要用函数;非用不可,建立函数索引。
15, 注意减少必要的排序,union会引起排序。Union all则不会。
16, 注意or的个数,太多or会导致执行计划选择错乱
17, 绑定参数的界定。注意根据业务情况来界定。
18, 注意组合索引首列顺序。唯一程度高的放在首列
19, Like 语句使用的问题。双%如何优化。Xxx%是可以用索引。%xx则不能。
20, DML及时提交,避免锁表太久。多进程同时进行时候,提交数据避免交叉集合的行锁,导致最后死锁。
21, 定时更新统计信息。特别重建索引,要更新。
22, Dual表语句消耗cpu。
23, 索引的建立原则。
24, 大表要分区
25, 函数和存储过程。维护困难,减少使用。
26, 触发器要少用。
27, 组合索引(列A<=X,列B>=Y。会屏蔽索引)
28, SQL业务逻辑优化
29, 小表扫描建议使用
30, 减少高并行,高频率的SQL
31, 碎片即使合并。(DELETE语句太多,引起ORACLE空间碎片)