查询执行时间很长

时间:2014-08-07 15:14:41

标签: mysql sql mysql-workbench

我目前正在使用mysql

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

我想使用zim_list_id表更新人员表

我正在使用的查询是

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`);

查询执行需要很长时间。有没有办法减少执行时间?

1 个答案:

答案 0 :(得分:2)

Office名称上的索引对此查询完全不执行任何操作。您对这些索引所做的就是使插入和更新变慢,因为现在数据库必须在列发生更改时更新索引。

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

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

最后,我很好奇该服务器中有多少内存(特别是相对于数据库的总大小),MySql buffer_pool_size设置中有多少内存,以及该服务器可能正在做的其他工作。 ..也总是存在一个环境因素。