测试随记

慢查询相关

上一篇 / 下一篇  2020-07-11 16:35:09 / 个人分类:随记

1. UNION ALL或者UNION代替ORIN

原因:OR不会用到索引,UNIONUNION ALL会用到索引,UNION会除去重复的数据,UNION ALL不会去除重复的数据,UNION ALL的效率是最高的

如:

Aselelct  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;

Bselect * 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 BYORDER BY

原因:GROUP BYORDER 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:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

我的栏目

日历

« 2020-08-18  
      1
2345678
9101112131415
16171819202122
23242526272829
3031     

我的存档

数据统计

  • 访问量: 744
  • 日志数: 4
  • 建立时间: 2020-07-11
  • 更新时间: 2020-07-11

RSS订阅

Open Toolbar