尝试使用子查询优化简单的SQL update语句
此查询非常慢,每条记录大约需要1秒的时间。可悲的是,由于数据库的大小,这是站不住脚的,因为它需要几天才能完成尝试使用子查询优化简单的SQL update语句,sql,mysql,Sql,Mysql,此查询非常慢,每条记录大约需要1秒的时间。可悲的是,由于数据库的大小,这是站不住脚的,因为它需要几天才能完成 你能提出一个大大加快速度的方法吗?(我只需要运行一次,但在中,您需要确保tasks.participant\u id.上有一个索引,这取决于每个参与者的任务数量(如果确实有很多)您还可以在时间戳上添加索引,尽管我不知道MySQL是否会使用它。您需要确保tasks.participant\u id上有索引。这取决于每个参与者的任务数量(如果确实有很多)您还可以在时间戳上添加索引,尽管我不知
你能提出一个大大加快速度的方法吗?(我只需要运行一次,但在中,您需要确保tasks.participant\u id.上有一个索引,这取决于每个参与者的任务数量(如果确实有很多)您还可以在时间戳上添加索引,尽管我不知道MySQL是否会使用它。您需要确保tasks.participant\u id上有索引。这取决于每个参与者的任务数量(如果确实有很多)您还可以在时间戳上添加索引,尽管我不知道MySQL是否会使用它。您可以使用这样的临时表:
create temporary table temp
select id as participant_id, min(time_stamp) as start_time
from participants inner join tasks on participants.participant_id = tasks.participant_id
group by participant_id;
update participants, temp
set start_time = temp.start_time
where participants.participant_id = temp.participant_id;
这将用更快的联接替换相关子查询
当与客户端的MySQL连接关闭时,MySQL服务器会自动删除临时表,因此根据应用程序的连接处理,您可能希望手动删除临时表。您可以使用如下临时表:
create temporary table temp
select id as participant_id, min(time_stamp) as start_time
from participants inner join tasks on participants.participant_id = tasks.participant_id
group by participant_id;
update participants, temp
set start_time = temp.start_time
where participants.participant_id = temp.participant_id;
这将用更快的联接替换相关子查询
当与客户端的MySQL连接关闭时,MySQL服务器会自动删除临时表,因此根据应用程序的连接处理,您可能需要手动删除临时表。我认为,您不需要内部选择
update participants set start_time = min(time_stamp)
更正:
update participants
set start_time = min(tasks.time_stamp)
from participants inner join
tasks on participants.participant_id = tasks.participant_id
有了正确的外键和索引设置,应该不会花那么长时间。我认为,您不需要内部选择
update participants set start_time = min(time_stamp)
更正:
update participants
set start_time = min(tasks.time_stamp)
from participants inner join
tasks on participants.participant_id = tasks.participant_id
如果外键和索引设置正确,则不会花费太长时间。该查询不会产生与OP相同的结果。每个参与者都有一个单独的开始时间。该查询不会产生与OP相同的结果。每个参与者都有一个单独的开始时间。Boom!一个索引!这是肯定的。是的,tasks.participant\u id字段没有索引。非常感谢!一个索引!肯定是这样。是的,tasks.participant\u id字段没有索引。非常感谢