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

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

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

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

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

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

© 2021 V2EX