大发幸运飞艇_大发幸运飞艇官网

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

时间:2020-02-02 00:08:45 出处:大发幸运飞艇_大发幸运飞艇官网

很多就剩下数据库版本了,RDS的版本是Mysql 5.5,而用户使用的数据库版本是5.6,很多大大问题 很原应出現在这里,mysql 5.6和5.5在优化器上最大的改进很多对子查询的优化改进:

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

PS.最佳实践:在oracle迁移到mysql的那么 ,请选用Mysql 5.6的版本,那么 就都时需处置麻烦的子查询改写了。

根据以上线索,用户是那么 从线下迁移到RDS的,很多数据量和表特性是相同的;

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

RDS配置为:2100M内存,1100IOPS,本地是笔记本电脑:1000M的内存,51000转的笔记本电脑,很多数据库配置来说区别未必大;

b.5.6对子查询处置:将子查询的结果集cache到临时表里,临时表索引的主要目的是用来移除重复记录,可是我 可是我 也原应用于在做join时做查询使用,你這個 技术在5.6中叫做Subquery Materialize.物化的子查询都时需看一遍select_type字段为SUBQUERY,而在MySQL5.5里为DEPENDENT SUBQUERY

碰到這個大大问题 时需考虑以下這個 因素:

SQL加快速度就执行得到结果;RDS原应推出5.6的版本,届时都时需选用购买5.6的实例,同样也都时需将5.5,5.1的实例升级到5.6,处置你会诟病的子查询性能大大问题 。

5.5的执行计划:

早上值班同事在旺旺群顶端贴了第二根非常复杂的SQL,用户从本地迁移到RDS Mysql出現严重性能下降,同样的数据和表特性下,在本地的数据库上若果都不能了1s的时间,可是我 在rds上好几分钟都没响应。

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

a.5.0、5.1、5.5对子查询处置:不要再将子查询的结果集计算出来用作与這個 表做join,很多很有原应outer 表每扫描第二根数据,子查询都不被重新执行一遍,那么 就原应性能下降;很多在5.5那么 的版本中,处置子查询的大大问题 通常采用sql改写:将子查询改写为join的法律妙招;

热门

热门标签