代码改变世界

SQL优化

2017-03-12 00:50  cnblogs_qm  阅读(174)  评论(0编辑  收藏  举报
 
 

总则
1. SQL优化要区分数据库
 

基础
1. 书写
语句用大写
 
2. SELECT
避免使用“*”
移除不必要的字段
 
3. FROM:FROM语句从后向前处理
选择最有效率的表名顺序
选择“基础表”放置于末尾
在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表
有3个以上的表连接查询,那就需要选择交叉表(intersection table)作为基础表, 交叉表是指那个被其他表所引用的表
使用表“别名”
移除不必要的表
 
4. WHERE:WHERE从下往上执行
将表之间的连接必须写在其它WHERE条件之前
将可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾
 
5. 其它
使用不同的“表空间”
 
 

索引
在SQL语句的WHERE和JOIN部分中用到的所有字段上,都应该加上索引。
不要把存在控制的列作为索引
 
注:监视索引是否被使用
-- 设置监视索引IDX_XXX
alter index IDX_XXX monitoring usage;

-- 检查索引使用情况
select * from v$object_usage;

 

 

子查询
在内部语句上使用过滤,而不是在外部语句上。
 
 

操作符
IN -> EXISTS
用EXISTS 方案代替
 
NOT IN
采用NOT EXISTS
 
IS NULL 或IS NOT NULL操作
 
UNION
UNION ALL
 
“>”、“<”
用“>=”、“<=”替换
 

最小数据集
 
 

临时表