mysql - 简单的 mysql 更新语句卡在大型数据库上

标签 mysql database optimization

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 数据库上运行良好,但在我们较大的临时数据库上挂起。有人知道为什么或如何更好地优化它吗?

最佳答案

不要使用子查询,而是尝试使用内联 View (如下所示),以便仅扫描 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) 上创建索引。

引用:

mysql update join on SO

关于mysql - 简单的 mysql 更新语句卡在大型数据库上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25085872/

相关文章:

android - 无法访问以前创建的 SQLite 数据库

c++ - 使用指针会导致内存堵塞吗?

PHP - 使用队列和 cron 作业还是直接处理请求?

php - 从 Javascript 中的多维 PHP 数组获取值

mysql - 大型数据集的数据库选择

c# - 数据库连接C#

python - 将表从 InnoDB 转换为 MyISAM 时出现 "A foreign key constraint fails"

.net - 其他 PC 无法识别的数据库格式

optimization - 需要帮助理解 PySpark 解释输出

JavaScript 堆内存不足增加 Node 内存或优化我的代码