【 TiDB 使用环境】生产环境 /测试/ Poc
【 TiDB 版本】
【复现路径】做过哪些操作出现的问题
【遇到的问题:问题现象及影响】
【资源配置】进入到 TiDB Dashboard -集群信息 (Cluster Info) -主机(Hosts) 截图此页面
【附件:截图/日志/监控】
纯sql问题。比如说我要用batch来实现, insert into tableA1 select * from tableA2; 这个操作,以减小对内存的开销。sql应该怎么写呢
【 TiDB 使用环境】生产环境 /测试/ Poc
【 TiDB 版本】
【复现路径】做过哪些操作出现的问题
【遇到的问题:问题现象及影响】
【资源配置】进入到 TiDB Dashboard -集群信息 (Cluster Info) -主机(Hosts) 截图此页面
【附件:截图/日志/监控】
纯sql问题。比如说我要用batch来实现, insert into tableA1 select * from tableA2; 这个操作,以减小对内存的开销。sql应该怎么写呢
文档中好像要具体指定某一列
指定主键就好了
直接Select*会报主键冲突吧。
tableA2是空表
空表也能指定主键,问题是空表做源表没意义啊
create table ts(id int, v int, key(id));
insert into ts values (1,2),(2,3),(3,4),(4,5),(5,6);
create table td(id int, v int,t datetime(3));
batch on ts.id limit 1 insert into td select id,v,now(3) from ts;
my:root@192.168.15.22:4000=> select * from td;
id | v | t
----+---+-------------------------------
1 | 2 | 2024-01-04T18:06:01.665+08:00
2 | 3 | 2024-01-04T18:06:01.671+08:00
3 | 4 | 2024-01-04T18:06:01.672+08:00
4 | 5 | 2024-01-04T18:06:01.673+08:00
5 | 6 | 2024-01-04T18:06:01.674+08:00
(5 rows)
目前batch on这种非事务DML还是有点鸡肋,简单的DML还好,但是一旦复杂一点的DML就会有问题,比如涉及关联子查询的DML并且内外表有取了别名,batch on这种非事务DML就不支持了。
这个问题,直接参考官方文档来改写就可以了吧。如果有遇到执行问题,再具体问题具体分析。
要指定主键
BATCH ON test.t2.id LIMIT 1 INSERT INTO t SELECT t2.id, t2.v, t3.v FROM t2 JOIN t3 ON t2.k = t3.k;
要指定主键吧
此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。