请问tidb batch on怎么使用?

【 TiDB 使用环境】生产环境 /测试/ Poc
【 TiDB 版本】
【复现路径】做过哪些操作出现的问题
【遇到的问题:问题现象及影响】
【资源配置】进入到 TiDB Dashboard -集群信息 (Cluster Info) -主机(Hosts) 截图此页面
【附件:截图/日志/监控】

纯sql问题。比如说我要用batch来实现, insert into tableA1 select * from tableA2; 这个操作,以减小对内存的开销。sql应该怎么写呢

看文档吧 BATCH | PingCAP 文档中心

文档中好像要具体指定某一列

指定主键就好了

直接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 天后被自动关闭。不再允许新回复。