没有合适的资源?快使用搜索试试~ 我知道了~
首页SQL优化实战:需求理解与高效改写案例
SQL优化实战:需求理解与高效改写案例
需积分: 20 2 下载量 198 浏览量
更新于2024-07-24
收藏 355KB PDF 举报
本文档由梁敬彬撰写,主要探讨了SQL等价改写优化的重要性,特别是在理解和满足业务需求的前提下。作者强调,只有深刻理解需求,才能编写出高效的SQL,而SQL改写是优化过程中的关键步骤。作者刻意避免提及执行计划的具体内容,因为即使执行计划分析是优化的一部分,如果忽视需求,过于复杂的SQL可能会导致在数据量增大后出现问题。 文档中的案例展示了一种名为“统一天下”的策略,即通过巧妙运用各种技巧来合并代码,减少表扫描次数,从而提高查询性能。案例1特别关注COUNT(CASE WHEN)类型的合并,并给出一个示例,其中涉及到了子查询和NVL函数,旨在合并状态信息并减少重复查询。作者提到,在实际开发过程中,低效的SQL往往在数据量较少时难以察觉,随着数据增长才会暴露问题,据统计,生产环境中约80%的数据库故障与不良SQL有关。 该文共分为三个部分,每个部分包含四个案例,总计12个经典案例,详细展示了如何通过等价改写优化SQL,降低查询成本,提高系统响应速度。对于数据库开发者和维护者来说,这是一份实用且具有参考价值的资源,有助于他们在实践中提升SQL优化技巧。阅读这些案例,可以帮助读者更好地理解如何在实际工作中应用SQL优化原则,避免常见的性能瓶颈。
资源详情
资源推荐
案例 3 注重 GROUP BY (CASE WHEN) 之类的合并技巧
s
elect decode(so.sFileName, 'SNP_20', 'SNP', 'HNIC_2', 'HNIC', 'IBRC_2', 'IBRC', 'IISMP_', 'IISMP', 'NIC_20', 'NIC',
'NIG_20', 'NIG', 'IIC_20', 'IIC', 'HIIC_2', 'HIIC', 'CA.D.A', 'CA.D.ATSR', 'ULH_20', 'ULH', 'IBRST_', 'IBRST',
so.sFileName) 业务名称,
so.sFileCount 合并前文件个数,
so.sRecordNum 合并前总记录数,
ta.tFileCount 合并后文件个数,
ta.tRecordNum 合并后总记录数,
NVL(so1.sFileCount, 0) 合并前当天文件个数,
NVL(so1.sRecordNum, 0) 合并前当天文件总记录数,
NVL(so2.sFileCount, 0) 合并前昨天文件个数,
NVL(so2.sRecordNum, 0) 合并前昨天文件总记录数
from (select substr(a.file_name, 1, 6) sfileName,
count(*) sFileCount,
sum(sRecordNum) sRecordNum
from (select distinct bsf.file_name,
bsf.record_num sRecordNum,
bsf.create_time
from BUSINESS_SEND_FILELIST bsf, IDEP_PLUGIN_AUTO_RELATION ipar
where bsf.file_id = ipar.bus_file_id
and trunc(ipar.relation_time) = to_date('2010-08-05', 'yyyy-mm-dd')) a
group by substr(a.file_name, 1, 6)
order by substr(a.file_name, 1, 6)) so
LEFT JOIN
(select substr(a.file_name, 1, 6) sfileName,
count(*) sFileCount,
sum(sRecordNum) sRecordNum
from (select distinct bsf.file_name,
bsf.record_num sRecordNum,
bsf.create_time
from BUSINESS_SEND_FILELIST bsf, IDEP_PLUGIN_AUTO_RELATION ipar
where bsf.file_id = ipar.bus_file_id
and trunc(ipar.relation_time) = to_date('2010-08-05', 'yyyy-mm-dd')
AND FILE_NAME LIKE '%20100805%') a
group by substr(a.file_name, 1, 6)
order by substr(a.file_name, 1, 6)) so1
ON (so.sFileName = so1.sFileName)
LEFT JOIN
(select substr(a.file_name, 1, 6) sfileName,
count(*) sFileCount,
sum(sRecordNum) sRecordNum
from (select distinct bsf.file_name,
bsf.record_num sRecordNum,
bsf.create_time
from BUSINESS_SEND_FILELIST bsf, IDEP_PLUGIN_AUTO_RELATION ipar
where bsf.file_id = ipar.bus_file_id
and trunc(ipar.relation_time) = to_date('2010-08-05', 'yyyy-mm-dd')
AND FILE_NAME not LIKE '%20100805%') a
group by substr(a.file_name, 1, 6)
order by substr(a.file_name, 1, 6)) so2
ON (so.sFileName = so2.sFileName)
LEFT JOIN
(select substr(a.file_name, 1, 6) tFileName,
count(*) tFileCount,
sum(record_num) tRecordNum
from (select distinct ipsf.file_name,
ipsf.record_num
from idep_plugin_send_filelist ipsf
where trunc(ipsf.create_time) = to_date('2010-08-05', 'yyyy-mm-dd')
and remark = '处理成功') a
group by substr(a.file_name, 1, 6)
order by substr(a.file_name, 1, 6)) ta
ON (so.sFileName = ta.tFileName)
where so.sFileName not like 'MVI%'
union
select so.sFileName,
so.sFileCount,
(so.sRecordNum - (so.sFileCount * 2)) sRecordNum,
ta.tFileCount,
ta.tRecordNum,
NVL(so1.sFileCount, 0),
(nvl(so1.sRecordNum, 0) - (nvl(so1.sFileCount, 0) * 2)),
NVL(so2.sFileCount, 0),
(nvl(so2.sRecordNum, 0) - (nvl(so2.sFileCount, 0) * 2))
from (select substr(a.file_name, 1, 3) sfileName,
count(*) sFileCount,
sum(sRecordNum) sRecordNum
from (select distinct bsf.file_name,
bsf.record_num sRecordNum,
bsf.create_time
from BUSINESS_SEND_FILELIST bsf, IDEP_PLUGIN_AUTO_RELATION ipar
where bsf.file_id = ipar.bus_file_id
and trunc(ipar.relation_time) = to_date('2010-08-05', 'yyyy-mm-dd')) a
group by substr(a.file_name, 1, 3)
order by substr(a.file_name, 1, 3)) so
LEFT JOIN
(select substr(a.file_name, 1, 3) sfileName,
剩余35页未读,继续阅读
zxx119261224
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- AirKiss技术详解:无线传递信息与智能家居连接
- Hibernate主键生成策略详解
- 操作系统实验:位示图法管理磁盘空闲空间
- JSON详解:数据交换的主流格式
- Win7安装Ubuntu双系统详细指南
- FPGA内部结构与工作原理探索
- 信用评分模型解析:WOE、IV与ROC
- 使用LVS+Keepalived构建高可用负载均衡集群
- 微信小程序驱动餐饮与服装业创新转型:便捷管理与低成本优势
- 机器学习入门指南:从基础到进阶
- 解决Win7 IIS配置错误500.22与0x80070032
- SQL-DFS:优化HDFS小文件存储的解决方案
- Hadoop、Hbase、Spark环境部署与主机配置详解
- Kisso:加密会话Cookie实现的单点登录SSO
- OpenCV读取与拼接多幅图像教程
- QT实战:轻松生成与解析JSON数据
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功