数据锁定阻止查询运行-MySQL InnoDB
我们需要每24小时运行一个脚本,计算一个大日志表中的数据总和和平均值,并更新主表(Innodb)中的数据,该表始终有许多选择/更新查询(大约每秒1个) 我在本地数据库上运行了一个测试查询,大约花了10分钟:数据锁定阻止查询运行-MySQL InnoDB,mysql,innodb,rowlocking,table-locking,Mysql,Innodb,Rowlocking,Table Locking,我们需要每24小时运行一个脚本,计算一个大日志表中的数据总和和平均值,并更新主表(Innodb)中的数据,该表始终有许多选择/更新查询(大约每秒1个) 我在本地数据库上运行了一个测试查询,大约花了10分钟: Update Main_Table Set Steps = (Select count(*) From Log_Activity Where Log_Activity.MainID = Main_Table.ID) 因为这会更新主表中的所有行,所以所有内容都会在live项目中被卡住,因为表
Update Main_Table Set Steps = (Select count(*) From Log_Activity Where Log_Activity.MainID = Main_Table.ID)
因为这会更新主表中的所有行,所以所有内容都会在live项目中被卡住,因为表被偷懒,我猜-我必须停止查询过程,以便再次正常工作-没有更新任何数据
我做了一些挖掘,我正在考虑以下3个选项:
Log\u Activity.MainID
上创建索引,如果还不存在索引:
ALTER TABLE Log_Activity ADD INDEX (MainID);
ALTER TABLE Main_Table ADD INDEX (ID);
Main_Table.ID
上创建索引,如果索引不存在:
ALTER TABLE Log_Activity ADD INDEX (MainID);
ALTER TABLE Main_Table ADD INDEX (ID);
UPDATE Main_Table JOIN (
SELECT MainID ID, COUNT(*) c
FROM Log_Activity
GROUP BY MainID
) t USING (ID)
SET Main_Table.Steps = t.c;
谢谢你!但是,我不希望为Log_Activity.MainID创建索引,因为此表每分钟(有时每秒)会有许多插入,并且预计插入量会增加…)还有其他想法吗?