MySQL with的原理

本文探讨了在力扣算法题601中,使用MySQL的WITH子句和直接查询体育馆人流量在性能上的差异。通过EXPLAIN分析,发现两者在底层实现上并无显著性能差距,WITH的主要作用在于代码封装,提高可读性。对于不熟悉WITH语法的开发者,可能会增加理解难度。结论是WITH更适合于重复调用或复杂子查询的情况,以保持SQL语句的整洁。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

力扣算法题:601. 体育馆的人流量
今天在刷算法题时,试用了with,发现性能上还不如直接查询
在这里插入图片描述

# Write your MySQL query statement below
explain with s as (
    select * 
    from Stadium
    where people >= 100
)
select distinct s1.*
from s s1, s s2, s s3
where 
    (s1.id = s2.id-1 and s2.id = s3.id-1) or
    (s1.id = s2.id+1 and s1.id = s3.id-1) or
    (s1.id = s2.id+1 and s2.id = s3.id+1)
order by visit_date
## 力扣中,两个代码不能同时运行,需要注释处理,提交时记得去除explain
explain select distinct s1.*
from Stadium as s1, Stadium as s2, Stadium as s3
where 
    (s1.people >= 100 and s2.people >= 100 and s3.people >= 100) and
    (
        (s1.id = s2.id-1 and s2.id = s3.id-1) or
        (s1.id = s2.id+1 and s1.id = s3.id-1) or
        (s1.id = s2.id+1 and s2.id = s3.id+1)
    )
order by visit_date

在这里插入图片描述然后觉得很奇怪,使用explain进行性能测试
发现底层上完全相同,with自是对SQL语句做了一层封装方便调用,调用几次就会查询几次

总结:

with唯一的作用就是封装,将代码进行封装,在多次重复调用相同代码的时候或在进行多次子查询时能将SQL语句抽离出来,使得代码更加简洁明了。
但对于没有使用过with的人来说,会提升代码阅读的难度
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值