MySQL - 从从服务器查询并在主服务器上插入

标签 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

我想做的是在从属数据库中执行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/

相关文章:

sql - SQL Server 2008密码以分号结尾

sql - PostgreSQL:清除所有表

mysql - having 子句会跳过计算字段的偶数值

mysql - #1111 - 在 mysql 中无效使用组函数

mysql - 从 SQL 文件创建数据库

java - JDBC-无法检索值并删除 mysql 数据库中的表

php - 如何将这两个查询合并到一个 INSERT INTO 中?

sql - 如何在 SQL Server 2012 中设置每周自动备份?

mysql - 显示出现次数最多的组

php - 从 API 获取数据时诊断瓶颈