mysql - 查询执行时间较长

标签 mysql sql mysql-workbench

我目前正在使用mysql

我有两个名为 person 和 zim_list_id 的表,这两个表都有超过 200 万行

我想使用 zim_list_id 表更新 person 表

我正在使用的查询是

update person p JOIN zim_list_id z on p.person_id = z.person_id
set  p.office_name = z.`Office Name`;

我还在 zim_list_id 表和 person 表上创建了索引,我执行的查询是

create index idx_person_office_name on person(`Office_name`);
create index idx_zim_list_id_office_name on zim_list_id(`Office name`);

查询执行时间很长。有什么办法可以减少执行时间吗?

最佳答案

Office Name 上的索引对此查询没有任何作用。您对这些索引所做的只是使插入和更新速度变慢,因为现在只要列发生更改,数据库就必须更新索引。

如果您还没有这些表中的 person_id 字段的索引,那么您真正需要的是这些索引,以使联接更加高效。

您还可以考虑将 Office_Name 添加为 zim_list_id 表索引上的第二列,因为这将允许数据库完全从索引完成查询的该部分。但在我先设置普通 person_id 索引后检查结果之前,我不会这样做。

最后,我很好奇该服务器中有多少内存(尤其是相对于数据库的总大小而言)、MySql buffer_pool_size 设置中有多少内存可用,以及该服务器可能正在执行哪些其他工作。 ..也总是可能存在环境因素。

关于mysql - 查询执行时间较长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25186118/

相关文章:

php - 我们如何在此查询中添加超过 $subcategory_id 的内容

php - 从 mysqli_multi_query 获取最后结果

MySQL,外键约束没有任何区别

mysql - 记录没有索引的表的排序

mysql - 是否可以将 MySQL Workbench 文件保存为纯 XML?

mysql - SELECT RAND AS 字段同时选择字段修改的其他值

sql - MySQL查询错误

sql - 存储过程所有权链接

mysql - 有人让 mysql workbench 5.2 与 mamp 一起工作吗?

mysql - 尝试在 mySQL 的新列中将计算四舍五入到小数点后两位