left join 为何就是这么慢啊 都是10w 当量的表

SELECT
b.id
FROM
t_a a
LEFT JOIN t_user b ON a.user_name = b.loginname

查询 巨慢 都是10w 级别的表

做数据迁移

把原来的业务表 t_a 表中存的 a.user_name 更新成t_user 中的id

600多秒还没有查询出来!!
真给我跪了啊!

求大神指点!!!感激不尽!

2个回答

数据量太大分批吧,这么大的数据量查到JVM里也是一笔不小一开支啊
1.对A表进行备分以便出了问题之后回滚
2.给A表加一个字段用以区分该条记录是否已经更新
alter table t_a add column udate_tag tinyint default 0;
3.使用多线程进行批量查询,批量更新
SELECT
a.id,
b.id
FROM
t_a a
LEFT JOIN t_user b ON a.user_name = b.loginname limit 0, 500

update t_a a set a.valid_tag =1 where t_a.id in (.....);

betterNing_Z
betterNing_Z 谢谢
大约一年之前 回复

看下执行计划,有没有走索引,mysql,10w数据肯定没有这么慢。

xionglangs
编程爱好者熊浪 走索引跟字符集没有关系,应该是你没有跟对应的表建立索引,或者前面又范围查询
大约一年之前 回复
betterNing_Z
betterNing_Z 谢谢, 执行计划看了 就是没有走索引 然后不知道为什么 最后找到原因了a.user_name = b.loginname 这俩字段编码集不一样 一个utf8 另一个utf8mb4 哎
大约一年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐