SQL优化(exist和notexist优化为join提速30s)

项目上线后遇到查询超时问题,通过对存在exist和notexist的SQL进行优化,改用join操作,执行时间从20多秒和30秒大幅降至3秒。进一步通过建立索引,查询速度最终提升至不到1秒。这次经验强调了线上环境与测试环境的差异性,提醒在需求分析时要全面考虑,包括在预生产环境中测试接口,以及不断提升SQL编写技能以优化性能。
摘要由CSDN通过智能技术生成

前段时间上线一个项目,后面因为查询超时直接不显示数据,在测试环境是没有问题的,也是因为在测试环境数据量原因没什么异常,当时因为考虑不周也没有想到测试和生产的区别。

第一个SQL:

 SELECT
     OWNER .*
    FROM
     OWNER .T_OWNER_INFO OWNER
    WHERE
     OWNER .STATUS = '1'
    AND EXISTS (
     SELECT
      1
     FROM
      house.T_STOREGROUP_SCOPE_NEW SCOPE
     WHERE
      SCOPE .SCOPE_TYPE = '1'
     AND SCOPE .BUILDING_ID = OWNER .BUILDING_ID
     UNION
      SELECT
       1
      FROM
       house.T_STOREGROUP_SCOPE_HOUSE SCOPEH
      WHERE
       SCOPEH.SCOPE_TYPE = '1'
      AND SCOPEH.HOUSE_ID = OWNER .HDIC_HOUSE_ID
    )

执行时间大概20多秒

优化后:

SELECT
     OWNER .*
    FROM
     OWNER .T_OWNER_INFO OWNER
     join (
     SELECT
     distinct
      -1 house_id,SCOPE.BUILDING_ID
     FROM
      house.T_STOREGROUP_SCOPE_NEW SCOPE
     WHERE
      SCOPE .SC
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值