RDS最佳实践(四)—如何处理Mysql的子查询

  • 时间:
  • 浏览:0
  • 来源:大发彩神幸运飞艇_大发神彩幸运飞艇官方

c.数据库的数据量不同(系统遇到bug,生成了少量的垃圾数据),原因分析sql执行时间不同;

a.数据库的版本不同(不同的版本优化器策略不一样,原因分析异构数据库间的迁移:oracle–>mysql,sqlserver–>mysql),原因分析sql执行计划不同,最后原因分析sql执行时间不同;

SQL加快速度就执行得到结果;RDS原因分析推出5.6的版本,届时回会 取舍购买5.6的实例,同样也回会 将5.5,5.1的实例升级到5.6,外理给你诟病的子查询性能难题。

PS.最佳实践:在oracle迁移到mysql的以前,请取舍Mysql 5.6的版本,以前 就回会 外理麻烦的子查询改写了。

5.5的执行计划:

根据以上线索,用户是以前从线下迁移到RDS的,好多好多 数据量和表型态是相同的;

b.5.6对子查询外理:将子查询的结果集cache到临时表里,临时表索引的主要目的是用来移除重复记录,这个很久也原因分析用于在做join时做查询使用,这个技术在5.6中叫做Subquery Materialize.物化的子查询回会 看了select_type字段为SUBQUERY,而在MySQL5.5里为DEPENDENT SUBQUERY

b.数据库的配置不同(不同的内存配置,参数设置–query cache不是打开),原因分析sql执行时间不同;

RDS配置为:250M内存,150IOPS,本地是笔记本电脑:500M的内存,5500转的笔记本电脑,好多好多 数据库配置来说区别未必大;

早上值班同事在旺旺群上面贴了第一根非常僵化 的SQL,用户从本地迁移到RDS Mysql再次出现严重性能下降,同样的数据和表型态下,在本地的数据库上只是不到1s的时间,这个在rds上好几分钟都没响应。

碰到之类难题还要考虑以下这个因素:

a.5.0、5.1、5.5对子查询外理:回会将子查询的结果集计算出来用作与这个表做join,好多好多 很有原因分析outer 表每扫描第一根数据,子查询总要被重新执行一遍,以前 就原因分析性能下降;好多好多 在5.5以前的版本中,外理子查询的难题通常采用sql改写:将子查询改写为join的方法;

好多好多 就剩下数据库版本了,RDS的版本是Mysql 5.5,而用户使用的数据库版本是5.6,好多好多 难题很原因分析再次出现在这里,mysql 5.6和5.5在优化器上最大的改进好多好多 对子查询的优化改进: