测试随记
慢查询相关
上一篇 /
下一篇 2020-07-11 16:35:09
/ 个人分类:随记
1. 用UNION ALL或者UNION代替OR,IN
原因:OR不会用到索引,UNION和UNION
ALL会用到索引,UNION会除去重复的数据,UNION
ALL不会去除重复的数据,UNION ALL的效率是最高的
如:
A.selelct
col1,col2… from t1 where col1 =val1 or col1=val2;
修改为:
selelct col1,col2… from t1
where col1 =val1
union all
selelct col1,col2… from t1
where col1=val2;
B.select * from t1 where (col1>val1 and col2<val2) or col3=val3;
修改为:
select * from t1 where
(col1>val1 and col2<val2)
union all
select * from t1 where col3=val3;
2. 多表操作时,用NOT EXISTS替代NOT IN,用EXISTS替代IN
原因:NOT IN肯定不会用到索引,而NOT EXISTS可以用到索引,当内表数据量大于外表时,用EXISTS,当外表数据大于内表数据时用IN(内表和外表:内表指嵌套在内作为条件的表,外表指需要最终选择数据的表),经过测试,一般情况EXISTS效率优于IN
3. 优化GROUP BY,ORDER BY
原因:GROUP BY,ORDER BY容易全表扫描
4. 用EXISTS替换DISTINCT
原因:EXISTS子查询的条件一旦满足后,立刻返回结果
如:SELECT DISTINCT DEPT_NO,DEPT_NAME FROM DEPT D , EMP E
WHERE D.DEPT_NO = E.DEPT_NO
修改为:
SELECT DEPT_NO,DEPT_NAME FROM DEPT D WHERE EXISTS ( SELECT
‘X' FROM EMP E WHERE E.DEPT_NO = D.DEPT_NO)
5. 对大数据量,长时间操作需适当分批事务
原因:在一个事物中,大数据量,长时间的操作会占用很大资源,分批提交可以减少资源的占用
收藏
举报
TAG: