我在以下查询中发现了一个奇怪的行为:
UPDATE llx_socpeople SET no_email=1 WHERE rowid IN (SELECT source_id FROM llx_mailing_cibles where tag = "68d74c3bc618ebed67919ed5646d0ffb");
需要1分30秒。
当我将命令拆分为2个查询时:
SELECT source_id FROM llx_mailing_cibles where tag = "68d74c3bc618ebed67919ed5646d0ffb";
结果是10842
UPDATE llx_socpeople SET no_email=1 WHERE rowid = 10842;
结果以毫秒显示。
表llx_socpeople有大约7.000条记录,llx_mailing_cibles有大约10.000条记录。
MySQL版本是:5.7.20-0ubuntu0.16.04.1
我已经尝试优化/修复两个表而没有任何效果。
有什么想法吗?
答案 0 :(得分:0)
目前,正在为主查询的每一行运行子查询,我们可以期望更长的执行时间。 我建议依靠内部联接来执行更新:
.7958466-05:00
这样你肯定会获得更好的表现。
您可以使用EXPLAIN MySql语句解决慢速查询问题。从官方文档中it's dedicated page了解有关它的更多详细信息。它可以帮助您发现任何缺失的索引。