我曾经运行此命令在计数器表中插入一些行:
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
。
我想做的是在从属数据库中执行SELECT
,但获取结果并将其插入到主数据库中。是否可以?如何?做到这一点最有效的方法是什么? (插入曾经有 130 万行)
我正在运行 MariaDB 10.0.17
最佳答案
您必须将操作分成两部分,中间使用 java 或 php 等编程语言。
首先进行选择,然后将结果集加载到应用程序中,然后插入数据。
您可以用来加快选择速度的另一项优化是在表“ym_created_at”中添加一个新列,其中包含年份(created_at)和月份(created_at)的串联。在该列上放置索引,然后运行更新的语句:
insert into `monthly_aggregated_table`
select ym_created_at, count(r.id) from
raw_items r
group by 1;
更容易并且可能更快,因为没有函数作用于您使用分组依据的列。
关于MySQL - 从从服务器查询并在主服务器上插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29201545/