客户端字符集不一致 导致 相同sql在不同客户端 运行时间相差很大的问题

今天在优化sql的时候,发现了一个奇怪的问题,同一个sql 在自己这里运行正常 3s 左右,返回数据,但是发给同事运行,速度特别慢,一分钟都没返回结果,所有kill 掉了。刚开始还以为是发给同事的时候,丢数据了,通过仔细排查发现是因为 客户端字符集的问题造成join buffer (Block Nested Loop) 。所以运行的特别慢

问题sql
在这里插入图片描述
正常情况下的解析在这里插入图片描述
有问题情况下的解析
在这里插入图片描述
通过执行explain 比较。第二种情况下 studnet 谁能走了索引,但是使用了join buffer (Block Nested Loop) .
Block Nested Loop 是mysql 在做join的时候 将外层循环的行/结果集存入join buffer,内存循环的每一行数据与整个buffer中的记录做比较.这个会消耗大量的时间导致运行慢。
所有需要修改客户端的字符集。但是通过
show variables like ‘character%’;
命令,发现有好多,应该修改哪个或者是那几个呢?
在这里插入图片描述
通过查阅: http://mysql.taobao.org/monthly/2015/05/07/
最好是吧
character_set_client
character_set_results
character_set_connection
三个一同改了,
可以用set names ‘utf8’ 命令,三个同时修改
修改完成后,就正常了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值