MySQL连接与性能

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,那么如果

假设此表: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的过程稍微长一点。或者我的逻辑是错误的

提前谢谢

两个查询没有区别,只需继续并尝试使用您喜欢的一个即可

编辑:编辑问题时


它们在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