比如有用户表
user_id, user_name, ......
事件表
ev_id, user_id, ev_info, ev_time, .......
这里查询了事件表的信息,某些情况下需要返回user_name字段,是将事件表查出来之后利用user_id集合单独将user_name查询出来,还是直接利用inner join。
各位都是怎么做的,假设用户表在10万左右,事件表在100万左右。
![]() | 1 Septembers 2015-07-18 08:47:38 +08:00 当然是inner join (如果用的MySQL的话请 真爱生命,远离MySQL (另外100万规模还好意思说? |
![]() | 2 loveyu OP @Septembers 真是mysql,只是现在够用。100万只是个假设的数字,唉 |
3 publicID001 2015-07-18 09:08:27 +08:00 ![]() 没钱玩:PostgreSQL 有钱玩:Oracle Database 做死玩:MySQL |
![]() | 4 MrJing1992 2015-07-18 09:19:24 +08:00 via iPhone ![]() 用explan看看,建议单独查。用连表确实是一条语句搞定,当时连表越多意味着扫描表时IO开销越大。数据量小且有索引时,问题不大。单独查时,in里面的数据一般不会放很多,而且还是索引字段,所以性能也还好。后期可以把user_name什么的缓存着,毕竟用户表几乎都要查它,而且它变化的频率很低。所以建议单独查,后期用户时改动会小一下。 |
![]() | 5 loveyu OP @publicID001 好建议,转PostgreSQL中 |
![]() | 6 leyle 2015-07-18 11:53:24 +08:00 v2ex 是 MySQL 吧? |
7 powergx 2015-07-18 12:30:14 +08:00 via iPhone ![]() postgresql+redis |
8 kslr 2015-07-18 14:49:18 +08:00 via Android 瞎折腾,MySQL我跑了七八亿好好的 |
![]() | 9 iyaozhen 2015-07-18 15:27:48 +08:00 为什么 mysql 不行呀?用的感觉好好的呀。 |
11 gdtv 2015-07-18 17:46:33 +08:00 @Septembers @publicID001 请问像楼主这样的数据量和查询要求,如果用一条inner join语句,PostgreSQL、Oracle Database、MySQL的效率差多少? 谢谢。 |
![]() | 12 bitzhuxb 2015-07-18 18:59:20 +08:00 如果userid有索引,inner join毫无问题 |