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

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 下推是查询改写的一项重要优化,利用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

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
SQL 存储 并行计算
SQL调优指南—SQL调优进阶—查询改写与下推
下推是查询改写的一项重要优化,利用PolarDB-X的拆分信息来优化执行计划,使得算子尽量下推以达到提前过滤数据、减少网络传输、并行计算等目的。
101 0
SQL调优指南—SQL调优进阶—查询改写与下推
|
SQL 存储 关系型数据库
SQL调优指南—SQL调优进阶—聚合优化和执行
本文介绍如何优化器和执行器如何处理聚合(Group-by),以达到减少数据传输量和提高执行效率的效果。
201 0
|
SQL 存储 搜索推荐
SQL调优指南—SQL调优进阶—查询优化器介绍
查询优化器通过优化逻辑计划从而输出物理计划,其主要阶段包含查询改写和计划枚举。本文将会介绍查询优化器的基本原理包含关系代数算子、查询改写(RBO阶段)、查询计划枚举(CBO阶段)。
108 0
SQL调优指南—SQL调优进阶—查询优化器介绍
|
SQL 存储 并行计算
PolarDB-X 1.0-用户指南-SQL调优指南-SQL调优进阶-查询改写与下推
下推是查询改写的一项重要优化,利用PolarDB-X的拆分信息来优化执行计划,使得算子尽量下推以达到提前过滤数据、减少网络传输、并行计算等目的。
124 0
PolarDB-X 1.0-用户指南-SQL调优指南-SQL调优进阶-查询改写与下推
|
4天前
|
弹性计算 安全 API
访问控制(RAM)|云上安全使用AccessKey的最佳实践
集中管控AK/SK的生命周期,可以极大降低AK/SK管理和使用成本,同时通过加密和轮转的方式,保证AK/SK的安全使用,本次分享为您介绍产品原理,以及具体的使用步骤。
101786 0
|
4天前
|
SQL 关系型数据库 分布式数据库
Doodle Jump — 使用Flutter&Flame开发游戏真不错!
用Flutter&Flame开发游戏是一种什么体验?最近网上冲浪的时候,我偶然发现了一个国外的游戏网站,类似于国内的4399。在浏览时,我遇到了一款经典的小游戏:Doodle Jump...
|
12天前
|
弹性计算 运维 安全
访问控制(RAM)|云上程序使用临时凭证的最佳实践
STS临时访问凭证是阿里云提供的一种临时访问权限管理服务,通过STS获取可以自定义时效和访问权限的临时身份凭证,减少长期访问密钥(AccessKey)泄露的风险。本文将为您介绍产品原理,以及具体的使用步骤。
151035 4
|
10天前
|
数据采集 存储 运维
提升团队工程交付能力,从“看见”工程活动和研发模式开始
本文从统一工程交付的概念模型开始,介绍了如何将应用交付的模式显式地定义出来,并通过工具平台落地。
119990 57
|
11天前
|
监控 负载均衡 Java
深入探究Java微服务架构:Spring Cloud概论
**摘要:** 本文深入探讨了Java微服务架构中的Spring Cloud,解释了微服务架构如何解决传统单体架构的局限性,如松耦合、独立部署、可伸缩性和容错性。Spring Cloud作为一个基于Spring Boot的开源框架,提供了服务注册与发现、负载均衡、断路器、配置中心、API网关等组件,简化了微服务的开发、部署和管理。文章详细介绍了Spring Cloud的核心模块,如Eureka、Ribbon、Hystrix、Config、Zuul和Sleuth,并通过一个电商微服务系统的实战案例展示了如何使用Spring Cloud构建微服务应用。
103503 8