多个更新查询锁MYSQL表

多个更新查询锁MYSQL表,mysql,database,Mysql,Database,我的要求是根据客户提供的电子邮件地址更新用户阻止邮件列表。电子邮件地址可以是MD5、sha1或简单电子邮件地址的形式。 目前,当我用电子邮件列表更新用户电子邮件地址时,在花了这么多时间之后,它锁定了表,并且不再对该表执行进一步的查询过程。我还在这两个表上都添加了索引 查询: UPDATE database1.nl_user u INNER JOIN database2.email_blacklist e SET u.block_mail_list = IF(u.block_mail_list

我的要求是根据客户提供的电子邮件地址更新用户阻止邮件列表。电子邮件地址可以是MD5、sha1或简单电子邮件地址的形式。 目前,当我用电子邮件列表更新用户电子邮件地址时,在花了这么多时间之后,它锁定了表,并且不再对该表执行进一步的查询过程。我还在这两个表上都添加了索引

查询:

UPDATE database1.nl_user u 
INNER JOIN database2.email_blacklist e 
SET u.block_mail_list = IF(u.block_mail_list is NULL OR u.block_mail_list='',e.listId,concat(u.block_mail_list,',',e.listId)),e.isMatch = 1 
WHERE (md5(u.email) = e.email OR u.email = e.email OR sha1(u.email) = e.email);
用户表计数:“168219” 阻止的电子邮件列表计数:“36000”

谢谢你们的时间,期待你们的消息

谢谢!
关于,

对不起,我不清楚发生了什么。您的查询是否花费了太多时间,并且您希望它更快,以便可以更早地运行下一次更新?(一)次更新是否需要“永远”/未完成?当您更新表时,不能读取表中的内容吗(但要)?您是否尝试在表上运行多个更新,但这些更新遇到死锁或超时?您是否试图在表上运行多个更新,但它们会相互减慢速度,或者一个更新必须等待第一个更新完成(但它们实际上已完成)?您好,这是一个更新。查询持续工作,处理时间过长,我观察到此查询可能需要4个多小时才能完成,有时甚至无法完成。谢谢你抽出时间。(简而言之,它是一天运行一次的cron脚本)好吧,您需要在问题中添加解释计划(explain plan,
explain update database1.nl…
),这样我们就可以检查您的索引是否正常,但我假设每次执行170k sha和MD5可能只需要4小时。您可能应该将它们预先计算(并编制索引)存储在您的usertable中(作为生成的列或使用触发器使它们保持最新),这将使您的查询在几秒钟内运行。谢谢,我会检查并让您知道。感谢您的回复。