SQL调优指南—SQL调优进阶—查询改写与下推

简介: 下推是查询改写的一项重要优化,利用PolarDB-X的拆分信息来优化执行计划,使得算子尽量下推以达到提前过滤数据、减少网络传输、并行计算等目的。

背景信息

根据PolarDB-X的SQL语句优化的基本原则,可以下推尽量更多的计算到存储层MySQL上执行。可下推计算主要包括:

  • JOIN连接
  • 过滤条件(如WHEREHAVING
  • 计算(如COUNTGROUP BY
  • 排序(如ORDER BY
  • 去重(如DISTINCT
  • 函数计算(如NOW()函数)
  • 子查询

通过explain optimizer + sql可以看到查询改写的具体过程。

Project和Filter下推

一条SQL的执行计划在如下生成过程中,Filter和Project被先后下推到LogicalView算子里面。Filter和Project下推可以达到提前过滤数据,减少网络传输等效果。


mysql> explain optimizer select c_custkey,c_name from customer where c_custkey = 1;

其中c_custkey是分区键。1111.png

背景信息

根据PolarDB-X的SQL语句优化的基本原则,可以下推尽量更多的计算到存储层MySQL上执行。可下推计算主要包括:

  • JOIN连接
  • 过滤条件(如WHEREHAVING
  • 计算(如COUNTGROUP BY
  • 排序(如ORDER BY
  • 去重(如DISTINCT
  • 函数计算(如NOW()函数)
  • 子查询

通过explain optimizer + sql可以看到查询改写的具体过程。

Project和Filter下推

一条SQL的执行计划在如下生成过程中,Filter和Project被先后下推到LogicalView算子里面。Filter和Project下推可以达到提前过滤数据,减少网络传输等效果。


mysql> explain optimizer select c_custkey,c_name from customer where c_custkey = 1;

其中c_custkey是分区键。22222.png

拆分键不为c_nationkey情况:6666.png

JOIN下推

JOIN下推需要满足以下条件:

  • t1与t2表的拆分方式一致(包括分库键、分表键、拆分函数、分库分表数目)。
  • JOIN条件中包含t1,t2表拆分键的等值关系。此外,任意表JOIN广播表总是可以下推。


mysql> explain optimizer select * from t1, t2 where t1.id = t2.id;

一条SQL的执行计划在如下生成过程中,JOIN下推到LogicalView算子里面。JOIN下推可以达到计算离存储更近,并行执行加速的效果。1.1.png

JoinClustering

当有多个表执行JOIN操作时,PolarDB-X会通过join clustering的优化技术将JOIN进行重排序,将可下推的JOIN放到相邻的位置,从而让它可以被正常下推。示例如下:

假设原JOIN顺序为t2、t1、l2, 经过重排序之后,t2和l2的JOIN操作依然能下推到LogicalView。SQL复制代码


mysql> explain select t2.id from t2 join t1 on t2.id = t1.id join l2 on t1.id = l2.id;

Project(id="id")
HashJoin(condition="id = id AND id = id0", type="inner")
Gather(concurrent=true)
LogicalView(tables="t2_[0-3],l2_[0-3]", shardCount=4, sql="SELECT `t2`.`id`, `l2`.`id` AS `id0` FROM `t2` AS `t2` INNER JOIN `l2` AS `l2` ON (`t2`.`id` = `l2`.`id`) WHERE (`t2`.`id` = `l2`.`id`)")
Gather(concurrent=true)
LogicalView(tables="t1", shardCount=2, sql="SELECT `id` FROM `t1` AS `t1`")

子查询下推

一条SQL的执行计划在如下生成过程中,子查询下推到LogicalView算子里面。子查询下推可以达到计算离存储更近,并行执行加速的效果。

  1. 子查询会先被转换成Semi JoinAnti Join
  2. 如果满足上节中JOIN下推的判断条件,就会将Semi JoinAnti Join下推至LogicalView
  3. 下推后的Semi JoinAnti Join会被还原为子查询。


explain optimizer select * from t1 where id in (select id from t2);

2.1.png

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
12月前
|
开发者
【HarmonyOS Next开发】用户文件访问
文件所有者为登录到该终端设备的用户,包括用户私有的图片、视频、音频、文档等。 应用对用户文件的创建、访问、删除等行为,需要提前获取用户授权,或由用户操作完成。
250 10
【HarmonyOS Next开发】用户文件访问
|
11月前
|
vr&ar 云计算 UED
实时云渲染:推动XR技术产业化发展的关键技术之一
近年来,企业利用扩展现实(XR)为用户提供沉浸式虚拟环境,Cloud XR、协同技术和GPU资源池化技术成为XR产业应用的关键。Cloud XR通过云端计算资源实现高效图形渲染,降低终端要求;协同技术助力实时协作,提升团队效率;GPU资源池化则优化资源分配,降低成本。平行云LarkXR提供全面的解决方案,推动XR技术广泛应用。
366 18
|
机器学习/深度学习 人工智能 人机交互
ICML 2024:AI也会刷抖音!清华领衔发布短视频全模态理解新模型
【8月更文挑战第20天】SALMONN是由清华大学在ICML 2024发表的一种开创性的多模态模型,专为短视频全模态理解设计。它集成了预训练文本大模型与语音、音频编码器,能直接处理多样音频输入,在自动语音识别、翻译、情绪识别等任务中表现出色。SALMONN展现了令人兴奋的新能力,如翻译未训练语言和基于语音的问答。通过少样本激活微调,可进一步发掘其跨模态潜能。尽管如此,模型的计算成本和泛化能力仍是待克服的挑战。SALMONN标志着AI在具备通用听觉理解方面迈出重要一步。[论文链接: https://arxiv.org/abs/2310.13289]
459 3
|
机器学习/深度学习 人工智能 自然语言处理
人工智能在智能客服中的应用:技术革新与未来展望
【7月更文挑战第5天】人工智能在智能客服中的应用正引领着一场深刻的变革。通过自然语言处理、机器学习等核心技术的应用,智能客服不仅提高了服务效率和质量,还降低了企业成本,增强了客户满意度和忠诚度。未来,随着技术的不断进步和应用场景的拓展,智能客服将更加智能化、个性化,并在更多领域发挥重要作用。
1165 2
|
供应链 搜索推荐 数据挖掘
探索增强现实(AR)在零售业的应用
【5月更文挑战第12天】本文探讨了AR技术如何革新零售业,包括虚拟试衣间提升购物效率、产品信息展示增强认知、导航导购优化购物体验及互动营销增加用户粘性。AR技术能提升消费者体验,提高零售业效率,并增强品牌竞争力。随着AR的发展,零售业将迎来更多创新应用。
|
缓存 Shell iOS开发
macos的AppCode破解安装激活2022-09-07最新教程(附破解工具及激活码)
本文讲的是AppCode破解、AppCode激活码、AppCode安装、AppCode永久激活码的最新永久激活教程。
1586 0
macos的AppCode破解安装激活2022-09-07最新教程(附破解工具及激活码)
|
Linux 网络安全 文件存储
本地部署Jellyfin影音服务器并实现远程访问内网影音库
本地部署Jellyfin影音服务器并实现远程访问内网影音库
403 0
|
Web App开发
解决:chrome浏览器打印预览的时候出现顶部底部页眉页脚的问题
解决:chrome浏览器打印预览的时候出现顶部底部页眉页脚的问题
|
架构师 Java 关系型数据库
电商网站需求分析和架构设计(一)|学习笔记
快速学习电商网站需求分析和架构设计(一)
453 0
电商网站需求分析和架构设计(一)|学习笔记