MySQL社区

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
查看: 2384|回复: 2
打印 上一主题 下一主题

为啥一个连接update 5.6版本的比5.1版本的效率还低呢

[复制链接]
跳转到指定楼层
1#
发表于 2014-6-5 16:28:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近配到一个情况,在数据库升级的时候,发觉一个存储过程语句,原来5.1跑的还可以,升级到5.6后却基本上执行不下去,非常非常的慢,基本上执行不了语句是这样的:

UPDATE table1 a,table2  b
SET  a.c1 = b.c2
WHERE a.tt= b.tt   AND a.cId= b.cId   AND a.pId   = b.pId   AND a.sId   = b.sId   AND a.pmId= b.pmId   AND a.st= b.st


下面是执行计划:
    id  select_type  table   type    possible_keys  key     key_len  ref        rows  Extra                                               
------  -----------  ------  ------  -------------  ------  -------  ------  -------  ----------------------------------------------------
     1  SIMPLE       a       ALL     union_idx      (NULL)  (NULL)   (NULL)  2780965  (NULL)                                             
     1  SIMPLE       b       ALL     tt             (NULL)  (NULL)   (NULL)    21561  Using where; Using join buffer (Block Nested Loop)  


table2表确实没有索引的,在5.6上我试过了加b.tt, b.cId联合索引,就能在几秒时间内搞定,所以索引不是我问的关键点



我要问的关键点是:
为啥5.1上同样没索引可以20秒左右的时间内搞定,而在5.6上时间一个晚上都执行不完,服务器配置很好,64G内存,8块磁盘做的R10,并且服务器在测试阶段没上业务,所以没有任何其他压力


所以想请问大家下,这就是mysql5.6索引必须的,还是5.6默认做了什么事情搞不定,需要做个啥设置才可以呢


感谢
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享淘帖 顶1 踩
2#
发表于 2014-6-10 18:07:52 | 只看该作者
这种SQL语句的执行,不一定高版本里比低版本里好,我记得Pater的高性能书里有过这种说法。

因为高版本里的查询分析器可能做了调整和优化,而这种调整是综合的,对于某些语句就不一定会快。所以Pater也建议对于版本升级一定要做前期的性能测试。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|申请友链|小黑屋|Archiver|手机版|MySQL社区 ( 京ICP备07012489号   
联系人:周生; 联系电话:13911732319

GMT+8, 2024-6-18 00:23 , Processed in 0.066312 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表