有数据库相关的问题,我有一个表,里面有三列,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/

有数据库相关的问题,我有一个表,里面有三列,customer简化之后表结构如下:idnamesource1客户1a渠道2客户1b渠道3客户2a渠道4客户3a渠道5客户1c渠道我现在的逻辑是根据传进来的id查找name,然后再根据name来查找id;select id,name from customer where nam...
最近网站访问量大增,可能有些频道程序也有一些问题,造成了MySQL数据库出现Forcing close of thread 28790 user错误。如果遇到这种情况改怎么解决呢?icech找到两种方法来解决: 1、修改mysql配置文件 如果配置文件是my.ini,可以在在my.ini添加下面两条内容: skip-locking skip-name-resolve 注意:在新版本的mysql中,skip-locking已经被换成了skip-external-locking,如果使用skip-locking,可能会报如下错误: [Warning] ‘–skip-locking’ is depr
读《高性能MySQL》 第一章:一个章节就讲清楚 MySQL 架构,锁,事务,多版本并发控制等,讲得很精炼,需要了解过才能读懂上下文。 四、五、六章:主要介绍查询优化,比较贴近日常业务开发工作 八、九、十四章:讲服务器优化,硬件优化,应用层优化 十、十一,十二、十五:讲复制,扩展,高可用,备份与恢复,与MySQL的高可用、扩展性有关 一说到提高 SQL 的查询效率,脑海里条件反应似的想到加索引。 其实加索引这是一方面。 我觉得需要一个系统的、有结构的分类和总结。 大致分为库表结构优化、索引设计优化查询.
+-------+-------+-------+----+ | class | name | score | id | +-------+-------+-------+----+ | 1 | user1 | 10...
优化程序过程中碰到个问题,表中的属性字段记录了很多属性id,表中总记录为80多万行,每行76列,简化表如下,此前使用的是 like '%,2019,%'这种方式查询,需要1300ms,改成find_in_set方式之后,变成1100ms左右,已经给ids加了索引,但是explain sql发现并没有用到。请问有什么方式可以把这个查询油画到300ms以内?ids列加了索引 table prods;