当前位置: 首页 > wzjs >正文

百度商桥网站加不上技能培训机构排名前十

百度商桥网站加不上,技能培训机构排名前十,厦门百度竞价开户,线上电商怎么做or 与 union all的优化 在SQL开发中,我们经常会遇到这样的情况:需要组合多个相似但略有不同的查询结果。大多数开发者本能地使用UNION/UNION ALL来解决,这种方式直观易懂,但在特定场景下却隐藏着巨大的性能浪费。 本案例将从执行…

or 与 union all的优化
在SQL开发中,我们经常会遇到这样的情况:需要组合多个相似但略有不同的查询结果。大多数开发者本能地使用UNION/UNION ALL来解决,这种方式直观易懂,但在特定场景下却隐藏着巨大的性能浪费。

本案例将从执行原理层面,深入剖析为什么在某些情况下,OR条件能比UNION ALL带来质的性能提升。

  • 第一部分:查询dcc_sys_log表中cause条件为"对端被关闭%"的记录
    select peer_id 对端标识,
    null 源域名,
    null 目标域名,
    alert_type 告警类型,
    log_time 告警时间,
    cause 告警内容,
    deal_log 处理状态,
    deal_staff 处理人,
    deal_time 处理时间,
    remark 备注
    from dcc_sys_log
    where action = ‘disconnect’
    and cause like ‘对端被关闭%’
    and deal_log = ‘deal_log’
    and alert_type = ‘alert_type’
    and log_time >= TO_DATE(‘2024-08-02’, ‘YYYY-MM-DD’)
    and log_time < TO_DATE(‘2024-08-03’, ‘YYYY-MM-DD’) + 1
    – 第二部分:查询dcc_ne_log表中result=0的记录
    union
    (select peer_id 对端标识,
    origin_host 源域名,
    dest_host 目标域名,
    alert_type 告警类型,
    log_time 告警时间,
    cause 告警内容,
    deal_log 处理状态,
    deal_staff 处理人,
    deal_time 处理时间,
    remark 备注
    from dcc_ne_log
    where result = 0
    and cause like ‘parser失败%’
    and deal_log = ‘deal_log’
    and alert_type = ‘alert_type’
    and log_time >= TO_DATE(‘2024-08-02’, ‘YYYY-MM-DD’)
    and log_time < TO_DATE(‘2024-08-03’, ‘YYYY-MM-DD’) + 1)
    union
    – 第三部分:查询dcc_ne_log表中result_code特定值的记录
    (select peer_id 对端标识,
    origin_host 源域名,
    dest_host 目标域名,
    alert_type 告警类型,
    log_time 告警时间,
    cause 告警内容,
    deal_log 处理状态,
    deal_staff 处理人,
    deal_time 处理时间,
    remark 备注
    from dcc_ne_log
    where result_code = ‘DIAMETER_UNABLE_TO_DELIVER’
    and svcctx_id like ‘SR-Timeout%’
    and deal_log = ‘deal_log’
    and alert_type = ‘alert_type’
    and log_time >= TO_DATE(‘2024-08-02’, ‘YYYY-MM-DD’)
    and log_time < TO_DATE(‘2024-08-03’, ‘YYYY-MM-DD’) + 1)
    union
    – 第四部分:查询dcc_sys_log表中cause条件为"接收消息异常%"的记录
    (select peer_id 对端标识,
    null 源域名,
    null 目标域名,
    alert_type 告警类型,
    log_time 告警时间,
    cause 告警内容,
    deal_log 处理状态,
    deal_staff 处理人,
    deal_time 处理时间,
    remark 备注
    from dcc_sys_log
    where action = ‘disconnect’
    and cause like ‘接收消息异常%’
    and deal_log = ‘deal_log’
    and alert_type = ‘alert_type’
    and log_time >= TO_DATE(‘2024-08-02’, ‘YYYY-MM-DD’)
    and log_time < TO_DATE(‘2024-08-03’, ‘YYYY-MM-DD’) + 1)

分析问题
这段SQL的执行过程实际上是:

  1. 四次独立的表扫描:
  • 两次对dcc_sys_log表的完整扫描

  • 两次对dcc_ne_log表的完整扫描

  1. 四次过滤操作:
  • 每个子查询各自应用WHERE条件进行过滤
  1. 三次合并操作:
  • 对四个结果集执行UNION操作,包含排序和去重
  1. 四次重复的公共条件判断:
  • deal_log = ‘deal_log’

  • alert_type = ‘alert_type’

  • 相同的时间范围条件

这种写法的效率问题主要体现在:相同表被多次无谓地扫描,公共条件被重复判断,导致CPU和I/O资源的严重浪费。

精准优化:拆解和合并
经过分析,我们可以看到明显的优化空间:

  1. 相同表的查询合并:
  • 第一部分和第四部分都查询dcc_sys_log表

  • 第二部分和第三部分都查询dcc_ne_log表

  1. 差异点隔离:
  • dcc_sys_log表的差异仅在于cause条件

  • dcc_ne_log表的差异在于result/result_code/svcctx_id条件组合

将这些相似查询通过OR条件合并后的SQL:

– 第一部分:合并对dcc_sys_log的两次查询
select peer_id 对端标识,
null 源域名,
null 目标域名,
alert_type 告警类型,
log_time 告警时间,
cause 告警内容,
deal_log 处理状态,
deal_staff 处理人,
deal_time 处理时间,
remark 备注
from dcc_sys_log
where action = ‘disconnect’
and (cause like ‘对端被关闭%’ or cause like ‘接收消息异常%’)
and deal_log = ‘deal_log’
and alert_type = ‘alert_type’
and log_time >= TO_DATE(‘2024-08-02’, ‘YYYY-MM-DD’)
and log_time < TO_DATE(‘2024-08-03’, ‘YYYY-MM-DD’) + 1
union
– 第二部分:合并对dcc_ne_log的两次查询
select peer_id 对端标识,
origin_host 源域名,
dest_host 目标域名,
alert_type 告警类型,
log_time 告警时间,
cause 告警内容,
deal_log 处理状态,
deal_staff 处理人,
deal_time 处理时间,
remark 备注
from dcc_ne_log
where ((result = 0 and cause like ‘parser失败%’) – 第一个差异条件组合
or (result_code = ‘DIAMETER_UNABLE_TO_DELIVER’ and svcctx_id like ‘SR-Timeout%’)) – 第二个差异条件组合
and deal_log = ‘deal_log’
and alert_type = ‘alert_type’
and log_time >= TO_DATE(‘2024-08-02’, ‘YYYY-MM-DD’)
and log_time < TO_DATE(‘2024-08-03’, ‘YYYY-MM-DD’) + 1
实际应用中的注意事项

  1. 括号使用:在复杂OR条件组合中,正确使用括号确保逻辑正确

where ((result = 0 and cause like ‘parser失败%’)
or (result_code = ‘DIAMETER_UNABLE_TO_DELIVER’ and svcctx_id like ‘SR-Timeout%’))
and deal_log = ‘deal_log’
2. OR vs AND优先级:OR条件比AND优先级低,必要时使用括号明确优先级

  1. 处理NULL值:当OR条件两侧涉及NULL值判断时,需特别注意逻辑正确性

  2. 验证结果一致性:务必确认优化前后结果完全一致

  3. 索引使用情况:通过执行计划检查OR条件是否影响了索引使用

优化效果分析
这个优化带来了几个明显的好处:

  1. 表扫描次数减少:原来需要扫描dcc_sys_log表2次,dcc_ne_log表2次,现在各只需扫描1次

  2. I/O减少:减少了50%的表扫描,相应减少了磁盘I/O操作

  3. 代码简化:代码行数从34行减少到24行,更加简洁易读

  4. 排序操作减少:UNION操作需要对结果进行排序去重,合并后的查询能减少排序工作量

小结
本例通过OR条件替代UNION操作,减少表扫描次数。这种简单却有效的优化方法,在实际工作中经常被忽视。通过识别SQL中的重复访问模式,将相似条件的查询合并,我们可以在不改变业务逻辑的前提下,显著提升SQL执行效率。

在实际优化工作中,建议首先尝试通过EXPLAIN PLAN分析查询性能,然后再决定是使用OR条件还是保留UNION结构,以获得最佳性能。


文章转载自:

http://j0wgJNPB.hqmfn.cn
http://8OXVmstH.hqmfn.cn
http://j97lUpZb.hqmfn.cn
http://S4hiHti1.hqmfn.cn
http://HX8lV02T.hqmfn.cn
http://FZMl7ywz.hqmfn.cn
http://OH9QsvIb.hqmfn.cn
http://Mil5j3iT.hqmfn.cn
http://yIo8lL4U.hqmfn.cn
http://U9d4HMJU.hqmfn.cn
http://YmXtAw3A.hqmfn.cn
http://LY4Xt49l.hqmfn.cn
http://pvUcNOvh.hqmfn.cn
http://bqXN8rFd.hqmfn.cn
http://hRIhfww7.hqmfn.cn
http://Tqez6gY8.hqmfn.cn
http://95TQMdNo.hqmfn.cn
http://tFXpdpXA.hqmfn.cn
http://LKQtzxcz.hqmfn.cn
http://BUrZsenT.hqmfn.cn
http://8DZPjFo5.hqmfn.cn
http://lAnnoCzr.hqmfn.cn
http://IXh2WTR5.hqmfn.cn
http://OOZm5D25.hqmfn.cn
http://VSgWULvS.hqmfn.cn
http://XdSLAk8E.hqmfn.cn
http://Qkz9dNWC.hqmfn.cn
http://TMOb0SLu.hqmfn.cn
http://rampzZDJ.hqmfn.cn
http://5FTXair7.hqmfn.cn
http://www.dtcms.com/wzjs/620056.html

相关文章:

  • 建设专业网站哪家比较好网站转化分析
  • 宿迁城乡住房建设厅网站如何建网站免费
  • 有没有人一起做网站html免费模板下载
  • 范县网站建设费用新增备案网站负责人
  • 个人博客网站建设选题说明wordpress页面模板增加
  • 江汉路做网站的公司如何优化网站导航
  • 网址导航网站建站自动跳转手机网站
  • 电子商务网站建设客户需求调查表网站 备案 注销
  • 网站域名怎样选择wordpress怎么对接公众号
  • 企业网站建设需要做些什么北京网络广播电视台
  • 网站怎么做运营推广如何处理脓包痘痘
  • 知名wordpress架构网站成都广告公司地址
  • 轻量级网站开发可以做微网站的第三方平台
  • 网站设计协议烟台网页制作
  • 网上做效果图网站wordpress主机有什么优
  • 网站规划和网站建设如何从客户网站开发客户
  • 上传网站的三种方法百度搜索引擎网址格式
  • 网站怎么做必须交钱吗网站建设贰金手指下拉
  • 深圳 网站建设培训班瑞安网站网站建设
  • 长沙门户网站建设公司北大青鸟网站开发
  • 手机搭建网站工具电子商务网站开发时间进度表
  • 网站建设技术列表如何制作h5海报
  • 怎么做一个免费的网站商务网站开发实训任务书
  • 邢台网站制作哪里好乐都企业网站建设
  • 建设银行代发工资清单网站威海城乡建设局网站
  • 宁波龙山建设有限公司网站网站怎么做营销
  • tp5企业网站开发视频游戏建模培训
  • 用什么网站可以做微信小程序用什么开发工具
  • 吴桥县网站建设价格中国建站平台
  • 商洛 网站建设商丘网站制作费用