MySQL从每个组中选择最大记录并插入到另一个表中

标签 mysql database aggregate-functions greatest-n-per-group

表A中有4列,id、name、create_time和content。

create table A
(
    id int primary key,
    name varchar(20),
    create_time datetime,
    content varchar(4000)
);
create table B like A;

我想在同一个name中选择最大create_time条记录,并插入到另一个表B中。

执行sql如下,但是时间消耗 Not Acceptable 。

insert into B
select A.*
from A,
    (select name, max(create_time) create_time from B group by name) tmp
where A.name = tmp.name
  and A.create_time = tmp.create_time;

一张表有1000W行,10GB,执行sql花费200s。

有什么方法可以更快地完成这项工作,或者更改 MySQL Server 中的哪些参数以加快运行速度。

p: 表 A 可以是任何类型、分区表或其他类型。

最佳答案

首先确保 A (name, create_time) 和 B (name, create_time) 上有正确的索引 然后尝试使用显式连接和条件

insert into B 
select A.* 
from A 
inner join ( 
    select name, max(create_time) create_time 
    from B 
    group by name) tmp on  ( A.name = tmp.name and A.create_time = tmp.create_time)

关于MySQL从每个组中选择最大记录并插入到另一个表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41409823/

相关文章:

sql - SQL Server 是否具有与 Excel 的 KURT 功能等效的功能?

php - MySQL复杂多表计数

mysql - 如何使用SQL获取各个类别均匀分布的记录?

mysql - 使用 SQL 查询查找最接近的匹配字符串及其子字符串

ruby - 如何每小时执行一个函数并将结果添加到 Rails 中的数据库中?

php - 无法在XAMPP中使用php更新MYSQL数据库表字段

mysql - 如何为特定数据库模式设置 MariaDB 以从 mysql 服务器复制

mysql - 在 SQL 查询中封装聚合函数

MySQL 按年和周分区

php - 从确切日期到确切日期选择记录