....一些来自于博客学习,
一些来自于项目中的实践.
重点在于分享.
--sql 优化:
1), Oracle 数据库解析器从右向左解析.
where 子句能过滤掉最多的放最后面.
from 子句,数据越少的表作为基础表,放最后;如果有中间表,基础表为中间表.
2), 不要使用'*',因为会通过数据字典将'*'转化成所有的列.
3), 减少数据库访问;
可以用对象或者JSON暂存,最后提交的时候在访问数据库,比如 还款顺序配置;
可以一次性多查,即使没有相关联的表,也可以一个sql查出需要字段.
4), 用TRUNCATE代替DELETE;
TRUNCATE是DDL语句,DELETE是dml语句,会放到回滚段(rollbacksegments)中.
5), 在关联多张表的时候,一定要使用别名,即使没有歧义的列,也要用别名指明列.
6), 能用子查询的就不要关联表.
7), 用EXISTS替代IN、用NOTEXISTS 替代NOT IN;
IN,或者NOT IN都将执行内部排序和合并,NOT IN是效率最低的,他会全表扫描.
oracle遇到not,都会放弃索引,全表扫描.
8), sql语句用大写形式;
因为oracle总是先解析sql语句,先将sql语句转化为大写再执行;sql语句用大写的;
9), 避免在索引列上写函数或者计算,这样会放弃索引,全表扫描.
低效:SELECT… FROM DEPT WHERE SAL * 12 > 25000;
高效:SELECT… FROM DEPT WHERE SAL > 25000/12;
10), 创建合理的索引,多用联合索引,使用联合索引的时候一定要保持索引顺序,避免未使用到索引,而全表扫描.
转载时请注明.