参考资料

派生表

优化器可以使用两种策略来处理派生表引用(这也适用于视图引用):

将派生表合并到外部查询中(5.7引入的优化策略 derived_merge);

将派生表物化为内部临时表,再用于外部查询。

什么是派生表?形如以下子查询结果作为表对象的就是派生表:

SELECT * FROM (SELECT * FROM t1) AS derived_t1;

SELECT * FROM t1 JOIN (SELECT t2.f1 FROM t2) AS derived_t2 ON t1.f2=derived_t2.f1WHERE t1.f1 > 0;

通过 derived_merge 策略,上面两个派生子查询执行时等同:

SELECT * FROM t1;

SELECT t1.*, t2.f1 FROM t1 JOIN t2 ON t1.f2=t2.f1 WHERE t1.f1 > 0;

限制

当子查询包含以下操作时,derived_merge 策略失效:

Aggregate functions (SUM(), MIN(), MAX(), COUNT(), and so forth)

DISTINCT

GROUP BY

HAVING

LIMIT

UNION or UNION ALL

Subqueries in the select list

Assignments to user variables

Refererences only to literal values (in this case, there is no underlying table)

如果 derived_merge 策略失效,将按以下策略执行查询:

在需要派生表之前,优化器会推迟派生表的物化,这能提高性能。举例:表 t1 与派生表进行联接,如果处理 t1 表时返回结果为空,则不需要进行下一步联接,这是可以完全跳过派生表的物化;

查询执行期间,优化器会给物化派生表添加索引,提升效率。

对于第二点,可以看这个例子:

mysql> explain select * from t1 join (select distinct a from t2) as derived_t2 on t1.a=derived_t2.a;

+----+-------------+------------+------------+-------+---------------+-------------+---------+----------------+------+----------+-------------+

| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |

+----+-------------+------------+------------+-------+---------------+-------------+---------+----------------+------+----------+-------------+

| 1 | PRIMARY | t1 | NULL | ALL | a | NULL | NULL | NULL | 100 | 100.00 | Using where |

| 1 | PRIMARY | | NULL | ref | | | 5 | join_test.t1.a | 10 | 100.00 | Using index |

| 2 | DERIVED | t2 | NULL | index | a | a | 5 | NULL | 1000 | 100.00 | Using index |

+----+-------------+------------+------------+-------+---------------+-------------+---------+----------------+------+----------+-------------+

可以看到派生表确实是走索引的。不过也不是所有情况下都会给派生表添加索引,官档上原文:

The optimizer constructs an index over column f1 from derived_t2 if doing so would enable use of ref access for the lowest cost execution plan.

mysql derived优化,SQL优化:derived 派生表优化相关推荐

  1. MySQL数据通过SQL查询指定数据表的字段名及字段备注

    MySQL数据通过SQL查询指定数据表的字段名及字段备注 SELECT COLUMN_NAME,COLUMN_COMMENT FROM INFORMATION_SCHEMA.Columns WHERE ...

  2. MySQL常用优化指南,及大表优化思路(值得收藏)

    作者: 低至一折起 juejin.im/post/5b7d52afe51d453885030b91 当MySQL单表记录数过大时,增删改查性能都会急剧下降 单表优化 除非单表数据未来会一直不断上涨,否 ...

  3. 数据库调优策略:优化MySQL服务器、优化数据库结构、大表优化、隐藏索引对调优的帮助

    文章目录 1. 数据库调优的措施 1.1 调优的目标 1.2 定位调优问题 1.3 调优的维度和步骤 2. 优化MySQL服务器 2.1 优化服务器硬件 2.2 优化MySQL的参数 3. 优化数据库 ...

  4. 如何更改计算机性能,如何修改注册表优化电脑性能 修改注册表优化电脑性能方法...

    注册表相信电脑爱好者都不会陌生,通过 修改注册表可以实现优化各种电脑技能 ,在电脑安全设置,系统稳定性方面起着很重要的作用,但由于注册均为表值,因此很多电脑爱好者对于注册表都不赶去触及,害怕因此而影响 ...

  5. 注册表计算机性能设置怎么应用,如何修改注册表优化电脑性能 修改注册表优化电脑性能方法...

    注册表相信电脑爱好者都不会陌生,通过 修改注册表可以实现优化各种电脑技能 ,在电脑安全设置,系统稳定性方面起着很重要的作用,但由于注册均为表值,因此很多电脑爱好者对于注册表都不赶去触及,害怕因此而影响 ...

  6. 2021-06-21解决列表查询很慢的优化SQL定位查询慢原因优化

    解决问题如下 主要是耗时查询很久的问题! 1.查询定位下SQL是不是有慢查询: EXPLAIN SELECTp.id,p.news_id,parent_news_id,title,app_ids,ne ...

  7. MYSQL优化派生表(子查询)在From语句中的

    Mysql 在5.6.3中,优化器更有效率地处理派生表(在from语句中的子查询): 优化器推迟物化子查询在from语句中的子查询,知道子查询的内容在查询正真执行需要时,才开始物化.这一举措提高了性能 ...

  8. MySQL性能优化:SQL慢查询优化,索引优化,表优化

    1. MySQL优化概述 MySQL 优化是一个综合性的技术,在优化上存在着一个调优金字塔的说法,如下: 很明显从图上可以看出,越往上走,难度越来越高,收益却是越来越小的.比如硬件和 OS 调优,需要 ...

  9. Mysql的Derived派生表查询优化

    原文链接 8.2.2.4 使用合并(Merging)或具体化(Materialization)优化派生表(Derived)和视图引用(View) Mysql优化器可以使用以下两种策略来处理派生表引用( ...

最新文章

  1. android cpp做成so库,Android增量更新(二)—制作合成文件so库
  2. java 线程池 -- (Java并发)
  3. linux笔记索引 QQFF-200305
  4. clickjacking:X-frame-options header missing 漏洞解决办法
  5. 英国PHP轴承,php – 纵向宽度将如何影响轴承
  6. GEO hash 核心原理
  7. uni-app调用wifi接口
  8. cachecloud:安装部署(一)
  9. Qt之调用Windows图片查看器预览图片
  10. 记录建行外联平台退款操作
  11. DNA序列c语言,请问怎么用r语言进行dna序列分析?
  12. 快快网络融合CDN是什么
  13. [宋史学习] 取蜀将帅不利
  14. 笔记本损耗60 计算机提示,笔记本电脑电池损耗,详细教您笔记本电脑电池损耗怎么修复...
  15. AM5728高性能SOC,满足工业协议支持、大数据计算、实时控制等需求,适用于图像处理、电力协议管理
  16. 国产电动汽车与特斯拉差多少?
  17. 判定图中存在回路java_图示电路中二极管为理想二极管,请判断它是否导通,并求出 u 0 。 (7.0分)_学小易找答案...
  18. vue element el-date-picker绑定对象 v-model=‘xx.xx‘清空后数据还是显示
  19. Python学习笔记 - Python语言概述和开发环境
  20. SSM整合案例(超详细)

热门文章

  1. 微信头像圣诞帽来啦,分享给 TA 戴帽子吧
  2. 从百度春节红包看搜索框进化
  3. ABC3D创客项目:风力小车
  4. 关于使用Axis2 webservice 处理Fault响应时抛org.apache.axis2.AxisFault的分析
  5. 福娃“总动员”吹响奥运“集结号”
  6. 车载导航应用中基于Sketch UI主题定制方案的实现
  7. android自定义滑块解锁,使用Android自定义控件实现滑动解锁九宫格
  8. 商业贷款_住房公积金
  9. 软考网络工程师考证(手写笔记)复习专用
  10. SDL使用SDL_ttf显示文字