MySQL - 从slave查询并在master上插入

时间:2015-03-23 00:23:02

标签: mysql sql mariadb master-slave

我曾经运行此命令在计数器表中插入一些行:

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

1 个答案:

答案 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;

更容易,可能会更快,因为函数不会对您使用该组的列执行操作。