我目前正在使用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/