update temp_parent_rating_emails pre
set reminders_count = (select count(1) from vendor_rating_email vre where vre.parent_email_id = pre.email_id);
上面的查询在我的小型mysql数据库上运行正常但挂在我们较大的临时数据库上。有谁知道为什么或如何更好地优化这个?
答案 0 :(得分:1)
不使用子查询,而是尝试使用内嵌视图,如下所示,以便vendor_rating_email
表只扫描一次。
update temp_parent_rating_emails pre
JOIN
(
select
parent_email_id,
count(*) cnt_email
from vendor_rating_email
group by parent_email_id
) vre ON vre.parent_email_id = pre.email_id
SET pre.reminders_count = vre.cnt_email;
另外,请考虑在temp_parent_rating_emails (parent_email_id)
和vendor_rating_email (email_id)
上创建索引。
<强>参考强>:
答案 1 :(得分:0)
如果还没有索引,请尝试添加索引
ALTER TABLE vendor_rating_email ADD INDEX (parent_email_id) ;
然后查看您的查询是否运行得更快。大多数情况下,如果您的查询在小型数据库上运行速度很快,而在大型数据库上运行速度慢,则需要索引。