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

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

RDS配置为:2300M内存,13000IOPS,本地是笔记本电脑:3000M的内存,53000转的笔记本电脑,一点一点数据库配置来说区别不会大;

早上值班同事在旺旺群里边贴了一根绳子 非常复杂性的SQL,用户从本地迁移到RDS Mysql突然经常出现严重性能下降,同样的数据和表形态下,在本地的数据库上我希望非要1s的时间,但会 在rds上好几分钟都没响应。

c.数据库的数据量不同(系统遇到bug,生成了极少量的垃圾数据),意味着着sql执行时间不同;

SQL加快速度就执行得到结果;RDS但会 推出5.6的版本,届时可不还可以挑选 购买5.6的实例,同样也可不还可以将5.5,5.1的实例升级到5.6,补救让他诟病的子查询性能问提。

PS.最佳实践:在oracle迁移到mysql的之前 ,请挑选 Mysql 5.6的版本,另一个就可不还可以补救麻烦的子查询改写了。

a.5.0、5.1、5.5对子查询补救:不会将子查询的结果集计算出来用作与一点表做join,一点一点很有但会 outer 表每扫描一根绳子 数据,子查询非要被重新执行一遍,另一个就意味着着性能下降;一点一点在5.5之前 的版本中,补救子查询的问提通常采用sql改写:将子查询改写为join的妙招;

一点一点就剩下数据库版本了,RDS的版本是Mysql 5.5,而用户使用的数据库版本是5.6,一点一点问提很但会 突然经常出现在这里,mysql 5.6和5.5在优化器上最大的改进我希望对子查询的优化改进:

碰到累似 于于问提非要考虑以下一点因素:

根据以上线索,用户是之前 从线下迁移到RDS的,一点一点数据量和表形态是相同的;

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

5.5的执行计划:

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

b.5.6对子查询补救:将子查询的结果集cache到临时表里,临时表索引的主要目的是用来移除重复记录,但会 之前 也但会 用于在做join时做查询使用,并是不是技术在5.6中叫做Subquery Materialize.物化的子查询可不还可以看一遍select_type字段为SUBQUERY,而在MySQL5.5里为DEPENDENT SUBQUERY