直接用数据库进行inner join查询还是应该分两次查询?

问题是这样的,详细描述请看后面。

  1. inner join的方式与分开查询的方式相对比应该怎么使用,是应该一律用inner join还是要分情况考虑?
  2. 当我有上述这样的疑惑时,是否有什么办法自己实验来得到结果呢?

需求大概是这样:先从一个表里(User)找到几个满足条件的user_id, 再去另一个表里(Post)找到这几个人发的帖子的时间。

第一种方式很明确,inner join:

SELECT u.user_id, p.create_time
FROM User u INNER JOIN Post p ON u.user_id = p.user_id
WHERE u.user_id < 100 AND u.user_id > 50

第二种方式:
先单纯的查出这几个人:

SELECT user_id
FROM User
WHERE user_id < 100 AND user_id > 50

得到一个user_id的数组,然后再用IN的方式去查出post:

SELECT create_time
FROM Post
WHERE user_id IN (xxx)
阅读 3.6k
1 个回答

一定是优先使用INNER JOIN啦,假设你查出的user ids数组很大的话,会产生一个很长的字符串,生成很长的SQL,数据库parse这个SQL是要耗费多余的时间,并且如果JOIN的话,数据会有很多算法去优化你的查询的,IN并不能。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题