微课sql优化(4)、帮助“表姐”优化报表
发表于:2025-02-02 作者:千家信息网编辑
千家信息网最后更新 2025年02月02日,1、"表姐"的报表SQL问题今天"表姐"有个比较紧急的工作,有一张历史费用报表下班前必须查询出来,已经倒腾2个小时了,查询并发数已经加到40个,报表还是查询不出来,而且这个报表每月都会折磨表姐, 眼看
千家信息网最后更新 2025年02月02日微课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安全错误
数据库的锁怎样保障安全
mysql数据库指南
数据库视图可以查吗
酷播服务器
网络技术与应用哪本书好点
cf服务器连接超时请重启客户端
加强网络安全建设的建议
互联网科技市场背景
日本网络安全宣传月
服务器装在虚拟机里
我的世界枪服务器
金山云网络技术有限公司网站
大学软件开发专业怎么样
ftp实现软件开发版
免疫生信数据库
安全教育与网络安全直播回放
软件开发公司考核考试
济南联想服务器代理供应商
开封网络技术公司
蚌埠电力软件开发多少钱
怎样提高网络安全
2008服务器安全知乎
八百万网络技术有限责任公司
时序数据库支持windows
张伟宁安徽融茂网络技术有限公司
视频服务器ip怎么搜索
汽车行业用的软件开发
如何启动许可证管理器服务器
软件开发人员如何自我介绍
服务器如何设置域名
开发平台分布式内存数据库