【发布时间】:2017-05-15 13:21:45
【问题描述】:
表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,但耗时不可接受。
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 可以是任何类型、分区表或其他类型。
【问题讨论】:
-
你的意思是“select name, max(create_time) create_time from A ...”?
-
您想要表 B 中的所有记录,还是每个名称只有一个?在第一种情况下,您是否应该将 max() 命名为不同于 create_time 的名称以避免与 A 中已经存在的列发生冲突?还是不想保留原来的create_time?第二种情况(每个名字只有一条记录),内容和id应该是什么?您的问题中的一些示例数据和预期结果会有很大帮助。
标签: mysql database aggregate-functions greatest-n-per-group