博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
简单的一条SQL,不简单的做事思维 NOT IN 、NOT EXISTS、LEFT JOIN用法差别 ...
阅读量:6320 次
发布时间:2019-06-22

本文共 1184 字,大约阅读时间需要 3 分钟。

我司某程序员:一个简单的查询功能对业务系统没有多大影响...

我:......

看破不说破.....

面对这样的SQL 也难起波澜了 转交给DBA

10年经验程序员写的原语句:

SELECT

mobile

FROM

actdb.act_customer_info

WHERE

(    create_date BETWEEN '2019-02-25 00:00:00'    AND '2019-02-26 00:00:00')

AND (

id NOT IN (    SELECT        customer_id    FROM        parttime.ls_bill_info    WHERE        create_date BETWEEN '2019-02-25 00:00:00'    AND '2019-02-26 00:00:00')

);

原语句执行时间68秒

DBA优化后语句:

SELECT

mobile

FROM

actdb.act_customer_info a

WHERE

create_date BETWEEN '2019-02-25 00:00:00'

AND '2019-02-26 00:00:00'

AND NOT EXISTS (

SELECT    1FROM    parttime.ls_bill_info bWHERE    a.id = b.customer_idAND b.create_date BETWEEN '2019-02-25 00:00:00'AND '2019-02-26 00:00:00'

);

DBA优化后语句执行时间31秒

最后自己再花1分钟重写一下吧 ,也是满心惆怅啊......

SELECT

a.mobile,a.id,c.customer_id

FROM

actdb.act_customer_info a

LEFT JOIN (

SELECT    customer_idFROM    parttime.ls_bill_info bWHERE    b.create_date BETWEEN '2019-02-25 00:00:00'AND '2019-02-26 00:00:00'

) c ON a.id = c.customer_id

WHERE

a.create_date BETWEEN '2019-02-25 00:00:00'

AND '2019-02-26 00:00:00'

AND c.customer_id IS NULL
本质就是not in 和 not exists和left join的区别
这里就不发相关详细执行计划了,简单但又不简单,相信程序员或者DBA都可以写,但偏偏上线的是最差的一条.......

任重道远,磨砺前行吧~

转载地址:http://klaxa.baihongyu.com/

你可能感兴趣的文章
我们该如何做好Code Review?
查看>>
padStart 的 polyfill
查看>>
IBM发布全球首台商用量子计算机
查看>>
教育部下令中小学推广编程教育,全民AI真的要来了
查看>>
面向桌面开发的Windows Template Studio
查看>>
一文盘点Steam上VR游戏之最
查看>>
金秋十月 千家企业奏响品牌盛会评选交响曲
查看>>
bootstrap学习笔记--初识bs
查看>>
一统AI界的当红炸子鸡Python,这次要进入小学生课堂了!
查看>>
【读书笔记《Bootstrap 实战》】2.作品展示站点
查看>>
lucene DocValues——本质是为通过docID查找某field的值 看图
查看>>
.Net单元测试工具TestDriven.NET
查看>>
Java中的Atomic包
查看>>
类加载机制
查看>>
Selenium学习笔记之外部化相关测试数据---xml
查看>>
Cucumber入门之_Hooks&Background
查看>>
IDEA 中生成 Hibernate 逆向工程实践
查看>>
随机森林算法
查看>>
Android优化——绘制优化之android系统显示原理(一)
查看>>
TeeChart Pro VCL/FMX教程(五):图例设计
查看>>