mysql进阶 with-as 性能调优

Posted 一乐乐

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 临时表,节约了一次加载时间

以上是关于mysql进阶 with-as 性能调优的主要内容,如果未能解决你的问题,请参考以下文章

Mysql进阶优化篇01——四万字详解数据库性能分析工具(深入全面详细,收藏备用)

35 张图带你 MySQL 调优

Java进阶学习资料!java编译软件下载

《webpack实战调优进阶》 part2 优化部分

二十分钟带你了解JVM性能调优与实战进阶

断言with-as 篇,python 入门教程之每日 5 or 6 道题 | Python 技能树题库