Mysql 查询执行需要很长时间
我目前正在使用mysql 我有两个名为person和zim_list_id的表,两个表都有200多万行 我想使用zim_列表_id表更新person表 我使用的查询是Mysql 查询执行需要很长时间,mysql,sql,mysql-workbench,Mysql,Sql,Mysql Workbench,我目前正在使用mysql 我有两个名为person和zim_list_id的表,两个表都有200多万行 我想使用zim_列表_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_of
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名称作为第二列添加到<代码> ZimBistLyID/<代码>表索引中,因为这将允许数据库完全从索引中完全填充查询的那部分。但我不会这样做,直到我先设置了普通的person_id索引,然后检查了结果
最后,我想知道该服务器中有多少内存(特别是相对于数据库的总大小),MySql缓冲池大小设置中有多少内存可用,以及该服务器可能正在做的其他工作。。。也可能总是有环境因素。您的联接列上已经有索引了吗?(人员id)在两个表中?请定义“非常长”。在添加索引之前和之后是否进行了测量?在表中有其他索引吗?我删除了所有的索引,但是它没有区别。“您也可以考虑添加<代码> Office EngEng/<代码>作为<代码> ZimyListurID表中的第二列”…你的意思是“作为
zim\u list\u id
表的person\u id
索引上的第二列”?好的,我删除了所有索引,但没有任何区别,确定它工作了。我在两个表的person_id上重新创建了索引。更新只花了72秒。我在office_名称上创建索引时出错。谢谢你,乔尔