微课sql优化(4)、帮助“表姐”优化报表
发表于:2024-11-11 作者:千家信息网编辑
千家信息网最后更新 2024年11月11日,1、"表姐"的报表SQL问题今天"表姐"有个比较紧急的工作,有一张历史费用报表下班前必须查询出来,已经倒腾2个小时了,查询并发数已经加到40个,报表还是查询不出来,而且这个报表每月都会折磨表姐, 眼看
千家信息网最后更新 2024年11月11日微课sql优化(4)、帮助“表姐”优化报表
今天"表姐"有个比较紧急的工作,有一张历史费用报表下班前必须查询出来,已经倒腾2个小时了,查询并发数已经加到40个,报表还是查询不出来,而且这个报表每月都会折磨表姐, 眼看就要下班了,时间紧近,紧急求助。 经常被单位各位"表姐"骚扰,而且还特别紧急。。。。DBA的苦,好吧,放下手头工作,先帮"表姐"处理问题。。。。
DBA: 你的SQL发我看看? 表姐 : select /*+ parallel(T 40)*/* FROM ht.ht_tab_fy T WHERE EXISTS (SELECT 1 FROM ht2.ht_DEPT M WHERE T.DEPT_ID = M.DEPT_ID AND M.DEPT_TREE LIKE '%611002%') AND T.DATA_MONTH = '201709' ; DBA : 这个查询结果发我看看? explain plan for select * FROM ht.ht_tab_fy T WHERE EXISTS (SELECT 1 FROM ht2.ht_DEPT M WHERE T.DEPT_ID = M.DEPT_ID AND M.DEPT_TREE LIKE '%611002%') AND T.DATA_MONTH = '201709' ; select * from table(dbms_xplan.display()); 表姐 : ------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| ------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 25466 | 3531K| 80186 (2)| | 1 | HASH JOIN RIGHT SEMI| | 25466 | 3531K| 80186 (2)| | 2 | TABLE ACCESS FULL | ht_DEPT | 58 | 2494 | 8 (0)| | 3 | TABLE ACCESS FULL | ht_tab_fy | 118K| 11M| 80176 (2)| ------------------------------------------------------------------------------- DBA : 这两个查询结果给我 select version from v$instance; select name,value from v$parameter where name like '%multiblock%'; SQL> select name,value from v$parameter where name like '%multiblock%'; SQL> select version from v$instance; VERSION ----------------- 10.2.0.5.0 NAME VALUE -------------------------------------------------- -------------------------------------------------- db_file_multiblock_read_count 16
DBA : 从新收集下统计信息: exec dbms_stats.gather_table_stats(ownname=>'ht2',tabname=>'ht_DEPT',estimate_percent=>100,method_opt=>'for all columns size repeat',no_invalidate=>false,degree=>8,cascade=>true); exec dbms_stats.gather_table_stats(ownname=>'ht',tabname=>'ht_tab_fy',estimate_percent=>100,method_opt=>'for all columns size repeat',no_invalidate=>false,degree=>8,cascade=>true); 然后再执行你的语句: alter session set db_file_multiblock_read_count=128; --前面加一条 select * FROM ht.ht_tab_fy T WHERE EXISTS (SELECT 1 FROM ht2.ht_DEPT M WHERE T.DEPT_ID = M.DEPT_ID AND M.DEPT_TREE LIKE '%611002%') AND T.DATA_MONTH = '201709' ;
表姐 : 结果秒出,太感谢了,眼泪哗哗的!!!!
表姐的语句为什么得到了优化?原理是什么?
1、"表姐"的报表SQL问题
今天"表姐"有个比较紧急的工作,有一张历史费用报表下班前必须查询出来,已经倒腾2个小时了,查询并发数已经加到40个,报表还是查询不出来,而且这个报表每月都会折磨表姐, 眼看就要下班了,时间紧近,紧急求助。 经常被单位各位"表姐"骚扰,而且还特别紧急。。。。DBA的苦,好吧,放下手头工作,先帮"表姐"处理问题。。。。
2、问题分析
DBA: 你的SQL发我看看? 表姐 : select /*+ parallel(T 40)*/* FROM ht.ht_tab_fy T WHERE EXISTS (SELECT 1 FROM ht2.ht_DEPT M WHERE T.DEPT_ID = M.DEPT_ID AND M.DEPT_TREE LIKE '%611002%') AND T.DATA_MONTH = '201709' ; DBA : 这个查询结果发我看看? explain plan for select * FROM ht.ht_tab_fy T WHERE EXISTS (SELECT 1 FROM ht2.ht_DEPT M WHERE T.DEPT_ID = M.DEPT_ID AND M.DEPT_TREE LIKE '%611002%') AND T.DATA_MONTH = '201709' ; select * from table(dbms_xplan.display()); 表姐 : ------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| ------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 25466 | 3531K| 80186 (2)| | 1 | HASH JOIN RIGHT SEMI| | 25466 | 3531K| 80186 (2)| | 2 | TABLE ACCESS FULL | ht_DEPT | 58 | 2494 | 8 (0)| | 3 | TABLE ACCESS FULL | ht_tab_fy | 118K| 11M| 80176 (2)| ------------------------------------------------------------------------------- DBA : 这两个查询结果给我 select version from v$instance; select name,value from v$parameter where name like '%multiblock%'; SQL> select name,value from v$parameter where name like '%multiblock%'; SQL> select version from v$instance; VERSION ----------------- 10.2.0.5.0 NAME VALUE -------------------------------------------------- -------------------------------------------------- db_file_multiblock_read_count 16
3、 优化方案
DBA : 从新收集下统计信息: exec dbms_stats.gather_table_stats(ownname=>'ht2',tabname=>'ht_DEPT',estimate_percent=>100,method_opt=>'for all columns size repeat',no_invalidate=>false,degree=>8,cascade=>true); exec dbms_stats.gather_table_stats(ownname=>'ht',tabname=>'ht_tab_fy',estimate_percent=>100,method_opt=>'for all columns size repeat',no_invalidate=>false,degree=>8,cascade=>true); 然后再执行你的语句: alter session set db_file_multiblock_read_count=128; --前面加一条 select * FROM ht.ht_tab_fy T WHERE EXISTS (SELECT 1 FROM ht2.ht_DEPT M WHERE T.DEPT_ID = M.DEPT_ID AND M.DEPT_TREE LIKE '%611002%') AND T.DATA_MONTH = '201709' ;
4、优化结果
表姐 : 结果秒出,太感谢了,眼泪哗哗的!!!!
5、现在问题来了?
表姐的语句为什么得到了优化?原理是什么?
表姐
查询
报表
结果
问题
语句
工作
两个
信息
单位
历史
原理
小时
手头
方案
时间
眼泪
费用
还是
加一
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
江西标准软件开发产业
泰州电子网络技术有哪些
使用ajax删除数据库
qt 显示数据库的数据
荆门市网络安全攻防演练
手机后台软件开发
梅林web服务器
cepii数据库哪个代表中国
linux下的数据库操作
本地电脑怎么设置为网页服务器
java小型软件开发
上海宝信软件开发股份有限公司
共享软件开发系统
网络安全等级五级
云服务器操作系统激活
服务器内存条有标压的么
网络安全监测探针多少钱
redis写数据库
网络安全实验3
数据库系统概念mysql
c 数据库属性
网络安全零基础教程
无显示器服务器装系统
共享服务器怎么设置
佳驰软件加密狗数据库
新药综合性数据库包括哪些
福州焕夏网络技术有限公司
财务软件开发和运营的区别
远程服务器iis
网络技术发展速度