mysql - 两个表mysql更新语句超时-我做错了什么?

标签 mysql

我尝试使用以下语句从第二个表中填充一个表中的一些缺失数据(XX 和 YY 设置为整数值。

update ignore sub, user set sub.username=user.username
where sub.id>=XX and sub.id<YY and user.id=sub.user_id
and sub.status>0 and sub.username is null

sub 根据 id 建立索引 用户根据 id 建立索引

这对于子表中存在相应用户值的部分来说效果很好,但当找不到用户值时就会开始超时。为什么 mysql 会出现这个问题?有没有更好的方法来实现这一点?

最佳答案

您可能缺少子表中 user_id 字段的索引。

像这样添加索引:

ALTER TABLE `sub`
ADD INDEX (`user_id`);

如果查询仍然很慢,请运行此命令并发布结果:

EXPLAIN SELECT * 
FROM
    `sub`,
    `user`
WHERE
    `sub`.`id` >= XX
    AND `sub`.`id` < YY
    AND `user`.`id` = `sub`.`user_id`
    AND `sub`.`status` > 0
    AND `sub`.`username` IS NULL
;

关于mysql - 两个表mysql更新语句超时-我做错了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20547823/

相关文章:

mysql - 简单的 SQL 查询错误

php - 每个用户无限项的 MySQL 数据库结构

mysql - 我如何在 mysql 中做到这一点?

mysql 无法在 FROM 子句中指定更新目标表

php - Mysql 搜索带有特殊字符的查询

mysql - 在 Rails + MySQL 中存储百分比

Python将html插入mysql?

mysql - Rails 数据库性能调优

MySQL 查询 ORDER BY DateTime 问题

php - 检查单选按钮是否被选中并更新另一个字段