相关文章推荐
空虚的西瓜  ·  Error querying ...·  2 月前    · 
冷静的楼房  ·  SQL ...·  2 月前    · 
旅途中的茄子  ·  更新SQL子查询 - ·  2 月前    · 
曾经爱过的松树  ·  批量 kill mysql ...·  2 月前    · 
道上混的沙发  ·  Building an ASN1 set ...·  1 年前    · 

有数据库相关的问题,我有一个表,里面有三列,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反查优化记录_sql

上一篇: Request header field cache-control is not allowed by Access-Control-Allow-Headers in preflight respo

下一篇: laravel已经存在的表添加表字段新增字段