栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

使用 with as 优化SQL-深度剖析

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用 with as 优化SQL-深度剖析

背景:

        当我们书写一些结构相对复杂或者行数过多的SQL时,可能某个子查询在多个层级多个地方存在重复使用的情况。在 SQL 中,WITH 子句提供了一种编写辅助语句的方法,以便在更大的查询中使用。WITH 子句有助于将复杂的大型查询分解为更简单的表单,便于阅读。这些语句通常称为通用表表达式(Common Table Express, CTE),也可以当做一个为查询而存在的临时表。WITH 子句是在多次执行子查询时特别有用,允许我们在查询中通过它的名称(可能是多次)引用它。


WITH …… AS 语句运行原理

       WITH AS 短语,也叫做子查询语分(subquery factoring),可以让你做很多事情,定义一个SQL片段,该SQL片段会被整个SQL语句所用到。

     如果WITH AS 所定义的表名被调用两次以上,则优化器会自动将WITH AS 短语所获取的数据入入一个TEMP表里,如果只是被调用一次,则不会。而提示materialize 则是强制将WITH AS 短语里的数据放入一个全局临时表里。很多查询通过这种方法都可以提高速度。


WITH …… AS 的作用

     WITH AS 子句的功能是定义SQL语句级的临时表、该临时表仅对本次执行的SQL有效。

作用:

1、可以把复杂SQL语句按照特定的业务逻辑分成几个WITH AS临时表、再用这些临时表组成完整的SQL语句,从而提高SQL语句,从而提高SQL语句的可读性和编写。

2、把一大堆重复用到的SQL语句放在with as 里面,取一个别名,后面的查询就可以用它、从而减少SQL语句的长度、从而大幅提高SQL的执行效率和可读性。

3、这种方式比创建临时表效率更高


WITH …… AS 的使用

WITH WD AS

(

    SELECt car_id, sum(income) as total_income

    FROM car_id_income

    GROUP BY car_id

),

EM AS

(

    SELECt car_name, car_id

    FROM car_name_id

)

-- 将上述两张表取出汽车名称、汽车ID对应的收入

SELECt EM.car_name, WD.car_id, WD.total_income

FROM EM,WD WHERe WD.car_name = EM.car_id;


 文章最后,给大家推荐一些受欢迎的技术博客链接

  1. JAVA相关的深度技术博客链接
  2. Flink 相关技术博客链接
  3. Spark 核心技术链接
  4. 设计模式 —— 深度技术博客链接
  5. 机器学习 —— 深度技术博客链接
  6. Hadoop相关技术博客链接
  7. 超全干货--Flink思维导图,花了3周左右编写、校对
  8. 深入JAVA 的JVM核心原理解决线上各种故障【附案例】
  9. 请谈谈你对volatile的理解?--最近小李子与面试官的一场“硬核较量”
  10. 聊聊RPC通信,经常被问到的一道面试题。源码+笔记,包懂
  11. 深入聊聊Java 垃圾回收机制【附原理图及调优方法】

欢迎扫描下方的二维码或 搜索 公众号“大数据高级架构师”,我们会有更多、且及时的资料推送给您,欢迎多多交流!

                                           

       

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/389687.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号