有数据库相关的问题,我有一个表,里面有三列,customer简化之后表结构如下:

id

name

source

1

客户1

a渠道

2

客户1

b渠道

3

客户2

a渠道

4

客户3

a渠道

5

客户1

c渠道

我现在的逻辑是根据传进来的id查找name,然后再根据name来查找id;例如:传进来id是1和3,根据这两个id查到name值为客户1和客户2,然后根据这两个name去查询id,可得到1,2,3,5,翻译成sql就是下面的。

select id,name from customer where name in(select name from customer where id in(1,3));

现在有十万客户,这里面大概有1200左右的重复客户,有没有什么比较好的办法优化?传进来的id特别多,大概四万个id,所以执行起来很慢。现在id和name已经做了索引。
此问题记录一下,我现在正在找好的解决方案,出现这个问题的原因是,多个系统迭代,对接,遗留的老问题。改动原始数据的话,影响颇大!

解决方法不限制,可以redis之类的外部缓存。

解决办法:

select id,name from customer c1 left join customer c2 on c1.name=c2.name where c1.id in(1,3);

mysql各种join方法:
​​​https://cloud.tencent.com/developer/article/1444315​​​​https://mazhuang.org/2017/09/11/joins-in-sql/​

mysql反查优化记录_数据库