MySQL派生表重构 || MySQL专题3

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

承接上期,今天继续为大家带来MySQL视图优化的原创专家文章分享,来自DBA+社群MySQL领域原创专家——李海翔。以下是第三部分的内容。


专家简介

  

\
李海翔

网名:那海蓝蓝

DBA+社群MySQL领域原创专家


从事数据库研发、数据库测试与技术管理等工作10余年,对数据库的内核有深入研究,擅长于PostgreSQL和MySQL等开源数据库的内核与架构。现任职于Oracle公司MySQL全球开发团队,从事查询优化技术的研究和MySQL查询优化器的开发工作。著有《数据库查询优化器的艺术》一书。

 

 

2 V5.7.5 视图和FROM子句中的派生表的重构


2.1.1 V5.7.5 视图和FROM子句中的派生表的重构内容


最近几年,MySQL的优化器进步很快,MySQL的Optimizer团队对于优化器作了许多的优化工作。


MySQL在5.7.5版本中,对于视图和FROM子句中的DERIVED table进行了一次重构工作,工作的结果:


1)从概念、编码实现的角度,统一了二者的处理方式,使得相似的内容处理(视图和派生表的处理方式)逻辑保持了一致,同一套代码清晰便于理解


2)提高了FROM子句中派生表的处理效率(对于可以merge的视图和派生表采用merge优化)


3)对于不可merge的视图和派生表采用“物化”的方式进行优化,达到只执行一次多次使用的优化目的


例如:


\


从这个例子中可以看到,5.7.5版本中对于派生表采用了merge优化,消除了5.5中的子查询。这样查询效率得到较大提高。


从编码首先看,5.5代码mysql_make_view()中合并(merge)优化的代码被取出,这样就消除了单独优化视图的可能。


在sql_resolve.cc文件中通过调用SELECT_LEX::resolve_derived()统一对视图和派生表进行了如下操作:


\


其中,tl可以是视图或派生表,这样的对象,要么被采用“合并”的方式优化,要么被采用“物化”的方式优化。


如下是一个物化的例子(派生表中多了一个LIMIT子句)。


\


其实,MySQL优化器的进化一直在进行着,有些进步尽管不如5.7.5对派生表和视图的优化进步大,但每一个版本,总是在向前迈进。如5.6.3,物化操作只发生在执行阶段,如果是EXPLAIN获得执行计划,则物化操作不发生。


Materialization of subqueries in the FROM clause is postponed until their contents are needed during query execution, which improves performance。


2.1.2 V5.7.5 视图和FROM子句中的派生表的重构的限制


不是所有的视图和派生表都可以被merge,不可merge的情况,类似1.4节,即简单视图或派生表,可以被merge,复杂视图和带有GROUP/HAVING/DISTINCT/LIMIT/聚集函数等子句的派生表只能被物化。


本文来自云栖社区合作伙伴"DBAplus",原文发布时间:2015-11-17

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
Oracle 关系型数据库 MySQL
【mysql】—— 表的内连和外连
【mysql】—— 表的内连和外连
|
1月前
|
存储 关系型数据库 MySQL
【mysql】—— 表的增删改查
【mysql】—— 表的增删改查
|
16天前
|
存储 SQL 关系型数据库
【MySQL】4. 表的操作
【MySQL】4. 表的操作
19 0
|
15天前
|
存储 关系型数据库 MySQL
MySQL数据库性能大揭秘:表设计优化的高效策略(优化数据类型、增加冗余字段、拆分表以及使用非空约束)
MySQL数据库性能大揭秘:表设计优化的高效策略(优化数据类型、增加冗余字段、拆分表以及使用非空约束)
|
15天前
|
缓存 关系型数据库 MySQL
MySQL 查询优化:提速查询效率的13大秘籍(索引设计、查询优化、缓存策略、子查询优化以及定期表分析和优化)(中)
MySQL 查询优化:提速查询效率的13大秘籍(索引设计、查询优化、缓存策略、子查询优化以及定期表分析和优化)(中)
|
16天前
|
关系型数据库 MySQL
【MySQL】12. 表的内连和外连(重点)
【MySQL】12. 表的内连和外连(重点)
12 0
|
1月前
|
存储 关系型数据库 MySQL
【mysql】—— 表的约束
【mysql】—— 表的约束
|
1月前
|
存储 SQL 关系型数据库
【mysql】—— 表的操作
【mysql】—— 表的操作
|
1月前
|
Oracle 关系型数据库 MySQL
Flink CDC产品常见问题之从EARLIEST_OFFSET启动就报错如何解决
Flink CDC(Change Data Capture)是一个基于Apache Flink的实时数据变更捕获库,用于实现数据库的实时同步和变更流的处理;在本汇总中,我们组织了关于Flink CDC产品在实践中用户经常提出的问题及其解答,目的是辅助用户更好地理解和应用这一技术,优化实时数据处理流程。
|
1月前
|
SQL 关系型数据库 MySQL
【MySQL】——用SQL语句实现数据库和基本表的创建
【MySQL】——用SQL语句实现数据库和基本表的创建
62 3
【MySQL】——用SQL语句实现数据库和基本表的创建