[求优化] mysql 百万数据 IN 查询

2020-05-06 10:54:23 +08:00
 jss

##mysql 城市 IN 查询超时

MySql 代码

SELECT * FROM `user_info` WHERE (  `city_id` IN (45757,45967,46044,46126,46288,46473,46642,46769,46919,47078,47119,45758,45762,45786,45811,45822,45839,45850,45870,45877,45892,45905) ) AND `user_info`.`delete_time` IS NULL ORDER BY `id` DESC
7349 次点击
所在节点    程序员
64 条回复
barbery
2020-05-06 11:01:17 +08:00
这应该性能没啥问题吧 你确定走了 city_id 这个索引了吗?
airfling
2020-05-06 11:10:05 +08:00
city_id 索引建了没,想排序不要直接 select *,应该 selelct id,然后再根据 id 去 select *
justfindu
2020-05-06 11:10:41 +08:00
这么点数据 in 真的毫无压力, 当然前提是 mysql 5.7 及以上.
nita22
2020-05-06 11:14:55 +08:00
city_id 建索引,select * 如果可以的话就改为覆盖索引。explain 看看实际有没有用上
jss
2020-05-06 11:17:15 +08:00
@airfling 有建 city_id 索引
jss
2020-05-06 11:17:25 +08:00
@barbery 有建 city_id 索引
jsrgjcy1
2020-05-06 11:20:48 +08:00
semi-join
yourssheng
2020-05-06 11:21:11 +08:00
你 order by id 了。mysql 会 select 出来结果然后排序,如果 select 出来的结果很多还用到外部排序会很慢。
nita22
2020-05-06 11:21:27 +08:00
@jss 看下 city.id 是不是 varchar 类型,自动类型转换也会让索引用不上。具体还是 explain 看下
zy445566
2020-05-06 11:21:53 +08:00
你这表多大,百万级别应该毫无压力才对,否则就是你服务器垃圾
iyaozhen
2020-05-06 11:23:03 +08:00
口说无凭 explain xxx
show create table user_info
HunterPan
2020-05-06 11:23:08 +08:00
符合数据的条数如果过多,可以分页搞
jss
2020-05-06 11:24:39 +08:00
@nita22 有建 city_id 索引 ,possible_keys 中 有 city_id
jss
2020-05-06 11:26:21 +08:00
@nita22 city_id 类型是 int, explain 看了 possible_keys 中 有 city_id
mccreefei
2020-05-06 11:26:50 +08:00
看下 explain 是不是 Using filesort,是的话建议使用(city_id, id)联合索引
nita22
2020-05-06 11:27:34 +08:00
@jss 实际用到的索引是看的 key 吧,还得看 Extra 里面的内容
jss
2020-05-06 11:28:37 +08:00
@HunterPan 加了 LIMIT 0,20 还是一样
jss
2020-05-06 11:30:01 +08:00
@mccreefei 是:Using index condition; Using where
rrfeng
2020-05-06 11:36:28 +08:00
直接贴出来,一段一段发干毛
jss
2020-05-06 11:41:31 +08:00
@yourssheng 当 IN 城市数少于 20 个 去掉排序效果 明显 ,但是,我有 50 个以上 city_id 时 一样超时

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/668847

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX