我曾经运行此命令在计数器表中插入一些行:
insert into `monthly_aggregated_table`
select year(r.created_at), month(r.created_at), count(r.id) from
raw_items r
group by 1,2;
此查询非常繁重,需要一些时间才能运行(数百万行),raw_items
表是MyISAM,因此导致表锁定并且写入它必须等待插入完成。
现在我创建了一个从服务器来执行SELECT
。
我想要做的是在slave中执行SELECT
,但是获取结果并插入master数据库。可能吗?怎么样?最有效的方法是什么? (插入过去有130万行)
我正在运行MariaDB 10.0.17
答案 0 :(得分:0)
您必须使用java或php之类的编程语言将操作拆分为两部分。
首先选择,然后将结果集加载到应用程序中,然后插入数据。
另一个可以加速选择的优化是在表“ym_created_at”中添加一个新列,其中包含year(created_at)和month(created_at)的串联。在该列上放置索引,然后运行更新的语句:
insert into `monthly_aggregated_table`
select ym_created_at, count(r.id) from
raw_items r
group by 1;
更容易,可能会更快,因为函数不会对您使用该组的列执行操作。