mysql进阶 with-as 性能调优
使用前提:多次重复出现的子查询
with-as 意义:对于多次反复出现的子查询,可以降低扫描表的次数和减少代码重写,优化性能和使编码更加简洁
✿ 使用注意事项:
1、mysql版本
: 8以及8以上的
2、首先
定义子查询的临时虚拟表:
语法: with 临时表名 as 子查询,定义出(子查询)的虚拟临时表,然后定义之后需要立马引用才有意义
即:定义好with子查询,但其后没有跟select查询引用,会报错!
即:临时虚拟表需要立即引用它,with子查询语句必须定义在引用它的select语句之前!
3、定义多个子查询的临时表,这多个子查询共用一个with
,子查询之间使用,隔开
注意:子查询与引用之间不能加,
#WITH AS 语法: WITH 虚拟临时表名 AS (子查询) +引用
WITH temp AS (select * from t_teacher) # 定义子查询
(SELECT `name` FROM temp) t1, # 多次引用子查询的临时虚拟表
(SELECT age FROM temp) t2,
(SELECT sex FROM temp) t3
WHERE t1.id = t2.id AND t1.id = t3.id and t2.id = t3.id;
#WITH AS 语法(定义多个子查询)
WITH
temp1 AS (select * from t_teacher),
temp2 AS (select * from t_stu),
temp3 AS (select * from t_user)
select count(*) FROM temp1......
#....引用即可.....#
✿ 重复子查询之with-as是否使用效率对比:
- 没有使用with-as:selet 物理表时扫描了两次
- 使用了with-as:select 临时表,节约了一次加载时间


本文来自博客园,作者:一乐乐,转载请注明原文链接:https://www.cnblogs.com/shan333/p/15778971.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix