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 
相关文章
|
11月前
|
存储 编译器 C语言
深入理解GCC 和 G++ 编译器
GCC 和 G++ 是 GNU 工具链中的核心编译器,支持 C 和 C++ 程序开发。本文详细介绍其编译流程、常用选项及动态链接与静态链接的区别。编译过程分为预处理、编译、汇编和链接四个阶段,每个阶段有特定任务和命令选项。常用选项如 `-E`、`-S`、`-c` 和 `-o` 分别用于预处理、生成汇编代码、生成目标文件和指定输出文件。动态链接节省空间且易于更新,但依赖运行时库;静态链接独立高效,但文件较大且更新困难。合理选择优化选项(如 `-O0` 至 `-O3`)可提升程序性能。掌握这些知识有助于开发者更高效地编写、调试和优化代码。
深入理解GCC 和 G++ 编译器
|
10月前
|
图形学
unity Camera第一人称移动
第一人称视角移动模拟通过检测用户键盘和鼠标输入,实现场景中的位置移动和视角旋转。位置移动基于W、A、S、D键控制相机前后左右移动,视角旋转通过鼠标控制上下左右观察,避免翻转并限制旋转角度。代码使用Unity的Input类和Transform方法实现这些功能,确保流畅的第一人称体验。
|
机器学习/深度学习 算法 Ubuntu
解读深大的视觉开源源码
这篇文章详细解读了深圳大学步兵视觉开源代码RP_Infantry_Plus,包括功能介绍、效果展示、依赖环境、整体框架、实现方案、通讯协议、配置与调试以及总结展望,提供了RoboMaster2019赛场上装甲板和小符文的识别方案,并通过自定义通讯协议将视觉处理信息发送给下位机。
解读深大的视觉开源源码
聊天框(番外篇)—如何实现@功能的整体删除
上一篇文章中,我们已经初步实现了聊天输入框,但其@功能是不完善的,例如无法整体删除、无法获取除用户名以外的数据(假设用户名不是唯一的)。有问题就要想办法解决,在网上百度了一圈后,倒是有一些收获。本文就着重解决@的整体删除以及获取额外数据。
1480 0
聊天框(番外篇)—如何实现@功能的整体删除
|
存储 算法 数据处理
LabVIEW FPGA开发NI sbRIO-9607高精度数字滤波器
LabVIEW FPGA开发NI sbRIO-9607高精度数字滤波器
252 5
|
机器学习/深度学习 算法 算法框架/工具
《YOLOv8原创自研》专栏介绍 & CSDN独家改进创新实战&专栏目录
《YOLOv8原创自研》专栏介绍 & CSDN独家改进创新实战&专栏目录
701 3
|
网络协议 安全 物联网
你还在用IPv4?揭秘IPv6的几大神秘优势,这些功能你掌握了吗?未来网络的发展全看它了!
【8月更文挑战第19天】随着IPv4地址资源耗尽,IPv6作为新一代互联网协议标准登场。IPv6提供近乎无限的地址空间(3.4x10^38个地址),简化数据包头部以提高处理效率,引入无状态自动配置机制使设备能快速接入网络,集成IPsec提升安全性,并优化移动性和多宿主支持。这些优势共同推动互联网基础设施升级,迎接未来挑战。
948 0
|
机器学习/深度学习 人工智能 监控
人脸识别技术发展历史、技术全解和实战应用
人脸识别技术发展历史、技术全解和实战应用
765 1
|
弹性计算 应用服务中间件 Apache
2核4g云服务器支持多少人同时在线?2核4G服务器并发数计算
阿里云服务器2核4g并发数是多少?支持多少人同时在线?
1382 0
2核4g云服务器支持多少人同时在线?2核4G服务器并发数计算
|
弹性计算 Cloud Native 关系型数据库
【官方首发】—阿里云云计算&数据库ACP认证的解析与实战系列电子书来啦!
重磅推出【云计算、数据仓库、关系型数据库】ACP认证的解析与实战电子书!认证备考必备学习资料,免费下载!
【官方首发】—阿里云云计算&数据库ACP认证的解析与实战系列电子书来啦!