大家帮我估算一下这个查询所需要的时间

2019-02-22 23:46:18 +08:00
 deasty
一个大表,8 个字段,1400 万行,没有索引,打算执行下面的查询
select * from tab1 where userid in(select userid from tab1 where mm = 6)
已知 mm = 6 的 userid 有 18000 个
求估算输出结果大概需要多少时间
4021 次点击
所在节点    MySQL
12 条回复
feiyuanqiu
2019-02-22 23:51:14 +08:00
explain 一下
ppyax
2019-02-23 00:12:15 +08:00
in 不能超 1000
1762628386
2019-02-23 00:16:23 +08:00
@ppyax 为啥
Leigg
2019-02-23 00:28:42 +08:00
分钟级别至少的吧
lynskylate
2019-02-23 00:31:26 +08:00
in 是 n^2 的,写这种 sql review 的时候都会被打回去的
binux
2019-02-23 04:41:39 +08:00
你干嘛不 select * from tab1 where mm = 6
deasty
2019-02-23 08:37:01 +08:00
@binux 因为需要查询 mm = 6 的用户历史数据,表中存在同一个用户 mm = 5 和 mm = 6 的不同情况,需要都查询出来
opengps
2019-02-23 09:28:53 +08:00
没有索引,那么时间至少是全表大小硬盘读出的时间,再加上运算所需要的时间。先忽略运算部分,光读出部分就很耗时间了
leonme
2019-02-23 10:15:14 +08:00
@lynskylate 如何优化呢?
lynskylate
2019-02-23 17:17:56 +08:00
@leonme 通常用 join 代替 in, join 字段加索引,这个时间复杂度通常来说是 o n 的
winoros
2019-02-24 01:47:43 +08:00
那么为什么不加索引呢
luozic
2019-02-24 11:14:46 +08:00
为啥不用索引? 这种多的,要么搞个专门查询的 es 什么的,要么出钱。

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

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

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

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

© 2021 V2EX