在数据库中查询用户关联的信息是连表还是单独查询

2015 年 7 月 18 日
 loveyu

比如有用户表
user_id, user_name, ......

事件表
ev_id, user_id, ev_info, ev_time, .......

这里查询了事件表的信息,某些情况下需要返回user_name字段,是将事件表查出来之后利用user_id集合单独将user_name查询出来,还是直接利用inner join。

各位都是怎么做的,假设用户表在10万左右,事件表在100万左右。

3363 次点击
所在节点    问与答
12 条回复
Septembers
2015 年 7 月 18 日
当然是inner join
(如果用的MySQL的话请 真爱生命,远离MySQL
(另外100万规模还好意思说?
loveyu
2015 年 7 月 18 日
@Septembers 真是mysql,只是现在够用。100万只是个假设的数字,唉
publicID001
2015 年 7 月 18 日
没钱玩:PostgreSQL
有钱玩:Oracle Database
做死玩:MySQL
MrJing1992
2015 年 7 月 18 日
用explan看看,建议单独查。用连表确实是一条语句搞定,当时连表越多意味着扫描表时IO开销越大。数据量小且有索引时,问题不大。单独查时,in里面的数据一般不会放很多,而且还是索引字段,所以性能也还好。后期可以把user_name什么的缓存着,毕竟用户表几乎都要查它,而且它变化的频率很低。所以建议单独查,后期用户时改动会小一下。
loveyu
2015 年 7 月 18 日
@publicID001 好建议,转PostgreSQL中
leyle
2015 年 7 月 18 日
v2ex 是 MySQL 吧?
powergx
2015 年 7 月 18 日
postgresql+redis
kslr
2015 年 7 月 18 日
瞎折腾,MySQL我跑了七八亿好好的
iyaozhen
2015 年 7 月 18 日
为什么 mysql 不行呀?用的感觉好好的呀。
loveyu
2015 年 7 月 18 日
@iyaozhen 没人说不行,只是一部分场合不合适,导致一些人不喜欢而已
gdtv
2015 年 7 月 18 日
@Septembers
@publicID001
请问像楼主这样的数据量和查询要求,如果用一条inner join语句,PostgreSQL、Oracle Database、MySQL的效率差多少?
谢谢。
bitzhuxb
2015 年 7 月 18 日
如果userid有索引,inner join毫无问题

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

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

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

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

© 2021 V2EX