简单的一条SQL,不简单的做事思维 NOT IN 、NOT EXISTS、LEFT JOIN用法差别

简介: 我司某程序员:一个简单的查询功能对业务系统没有多大影响...我:......看破不说破.....面对这样的SQL 也难起波澜了 转交给DBA10年经验程序员写的原语句:SELECTmobileFROMactdb.

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

看破不说破.....
面对这样的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
    1
FROM
    parttime.ls_bill_info b
WHERE
    a.id = b.customer_id
AND 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_id
FROM
    parttime.ls_bill_info b
WHERE
    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都可以写,但偏偏上线的是最差的一条.......

任重道远,磨砺前行吧~

相关文章
|
1月前
|
SQL 关系型数据库 MySQL
7种SQL Join语句
7种SQL Join语句
18 1
|
4月前
|
SQL
sql 各种join 对比
sql 各种join 对比
30 0
|
4月前
|
SQL
SQL 的 AND、OR 和 NOT 运算符:条件筛选的高级用法
SQL的AND运算符用于根据多个条件筛选记录,确保所有条件都为TRUE才返回记录。下面是AND运算符的基本语法:
51 1
|
27天前
|
SQL 缓存 算法
SQL 语句不要过多的 join
SQL 语句不要过多的 join
18 1
|
1月前
|
SQL Java 关系型数据库
MyBatis的动态SQL之OGNL(Object-Graph Navigation Language)表达式以及各种标签的用法
MyBatis的动态SQL之OGNL(Object-Graph Navigation Language)表达式以及各种标签的用法
18 0
|
1月前
|
SQL Java 关系型数据库
MyBatis中的9种常用动态sql标签精妙用法
MyBatis中的9种常用动态sql标签精妙用法
58 0
|
2月前
|
SQL 关系型数据库 MySQL
Mysql SQL的一些特殊用法记录
1、查询group by having 中having不起作用,及解决
15 0
|
2月前
|
SQL
SQL语句case when的用法
SQL语句case when的用法
|
3月前
|
SQL Java 数据库连接
这个问题是由于Flink在执行SQL语句时,无法找到合适的表工厂来处理JOIN操作。
【1月更文挑战第17天】【1月更文挑战第85篇】这个问题是由于Flink在执行SQL语句时,无法找到合适的表工厂来处理JOIN操作。
23 8
|
3月前
|
SQL JSON 分布式计算
Spark SQL简介与基本用法
Spark SQL简介与基本用法