TIDB的临时表可以在该场景下使用吗?

【 TiDB 使用环境】线上 【 TiDB 版本】 5.7.25-TiDB-v5.4.0 【遇到的问题】in 的子条件过多,大表 inner join 性能差 【复现路径】 a/b 两个表,数据量在千万级别,查询语句都带有租户索引,语句如下:

select count(distinct a.customerId) as count from a  inner join b on a.customerId = b.id and a.company_id = b.company_id  where a.company_id = 'uuid-1'  and b.uids in ('1','2'......数量级在0-1000''); 

【问题现象及影响】

集群复杂60%左右,查询该语句直接超时不返回,cpu飙升至90以上

前两天看到文档上提及了临时表,因此我做了一个实验:

CREATE TEMPORARY TABLE users (
    id varchar(255) not null primary key
);

insert into users (id) values ('1','2' ....)

上述查询sql修改为:

select count(distinct a.customerId) as count from a  inner join b on a.customerId = b.id and a.company_id = b.company_id  where a.company_id = 'uuid-1'
and b.uids in (select id from users);

发现在1s返回了结果,

由于对临时表使用不熟悉,想请问一下大家这个场景下用临时表解决合不合适? 如果用临时表方案,在服务器运转的过程会创建很多张临时表,会不会对服务器有太大的压力?

怎么感觉速度快慢并不是这个临时表的问题,两个sql的执行计划都发一下

该主题在最后一个回复创建后60天后自动关闭。不再允许新的回复。