sql语法

【 TiDB 使用环境】生产环境 /测试/ Poc
【 TiDB 版本】
【遇到的问题:问题现象及影响】
sql语句怎样把一批数字组成一个中间表的一个字段,例如:
SELECT 1 as houseId
union SELECT 2 as houseId
union SELECT 3 as houseId

假如我有 1百万个houseId,上面的方法太笨,请问有没有好的方案?

【附件:截图/日志/监控】

建一个正真的中间表,里面就存储从1到10000000

你的原始需求是把一批给定的数字插入表,还是只是需要1到1百万个不同的数字?

  • 如果是给定的数字,那你可以新建表,然后load data进来
  • 如果只是需要数字,可以使用tidb提供的序号生成器

原始需求是需要house表和另外一个表关联,但是两个表在两个不同的数据库,目前是先查询出houseid集合在把houseID集合作为参数调用另外一个服务的接口通过 in(houseIds)去关联的(百万级别的houseID用in操作性能太低)。我想在代码中把houseids作为几个中间表 inner join操作,能大大提升效率

了解,你的场景就是使用业务给定的数字,其实你的思路是对的。
可以将houseID导入到目标表,然后inner join实现高效查询。

如果你使用的是6.1以后的版本,这里还有一个优化点,可以把这个houseID表设置为内存缓存表cache起来,你做join的时候效率还会更快

1 个赞

发一下版本吧,如果版本支持临时表,可以采用临时表

如果这两份数据的库是在同一个tidb集群,确实可以select处理再使用 临时表来优化。
如果是在不同的集群,只能先load 到同一个集群再用缓存表(或临时表)