MySQL连接与性能
假设此表:posts\u组 和表:员额 问题1 这个检查组是1,从当前表中键入,然后选择一些post\u id 问题2 这个查询也在做同样的事情。但是检查POSTS表中的类型 但是哪种方法速度更快,性能更好。你知道这两个查询是如何工作的吗 条件过程 在查询1中,它表示如果group_id=1和p.type=public,那么如果post.id=posts_groups.id加入posts 在查询2中,它表示如果group_id=1,那么如果post.id=posts_groups.id,那么如果posts.type=public JOIN posts query2的过程稍微长一点。或者我的逻辑是错误的 提前谢谢 两个查询没有区别,只需继续并尝试使用您喜欢的一个即可 编辑:编辑问题时MySQL连接与性能,mysql,sql,join,Mysql,Sql,Join,假设此表:posts\u组 和表:员额 问题1 这个检查组是1,从当前表中键入,然后选择一些post\u id 问题2 这个查询也在做同样的事情。但是检查POSTS表中的类型 但是哪种方法速度更快,性能更好。你知道这两个查询是如何工作的吗 条件过程 在查询1中,它表示如果group_id=1和p.type=public,那么如果post.id=posts_groups.id加入posts 在查询2中,它表示如果group_id=1,那么如果post.id=posts_groups.id,那么如果
它们在WHERE子句之前连接,因此没有区别。从第一个表或第二个表中获取条件,因为它们是第一个联接的。IMHO可能存在差异 当然,从逻辑上讲,WHERE是在联接之后处理的,但是大多数优化器将在联接之前/期间应用WHERE条件。如果类型列已编制索引,则计划可能会更改,因此您应该按照echo Me已经编写的方式比较计划 如果两个类型列都应该是公共的,您可以通过添加附加条件来帮助优化器:
SELECT post_id FROM posts_groups pg
JOIN posts p ON p.id = pg.post_id
WHERE group_id = 1 AND pg.type = public
AND p.type = public
或
我编辑了我的帖子,问题是echo_先生的其他问题。谢谢。我更新了帖子。请看一看thanks@Pars伙计,它们在WHERE子句之前连接,所以没有区别。从第一个或第二个表中获取条件,因为它们是第一个联接的。请使用EXPLAIN查看优化器要执行的操作。。。
+----+--------+
| id | type |
+----+--------+
| 1 | public | // example : post #1 is public
+----+--------+
SELECT post_id FROM posts_groups pg
JOIN posts p ON p.id = pg.post_id
WHERE group_id = 1 AND pg.type = public
SELECT post_id FROM posts_groups pg
JOIN posts p ON p.id = pg.post_id
WHERE group_id = 1 AND p.type = public
SELECT post_id FROM posts_groups pg
JOIN posts p ON p.id = pg.post_id
WHERE group_id = 1 AND pg.type = public
AND p.type = public
SELECT post_id FROM posts_groups pg
JOIN posts p ON p.id = pg.post_id
AND pg.type = p.type
WHERE group_id = 1 AND pg.type = public