Mysql:执行的不存在。有可能提高性能吗?
我有两个表帖子和评论。表注释具有post\u id属性。我需要获取所有类型为“open”的帖子,其中没有类型为“good”且创建日期为5月1日的评论 使用这样的SQL查询是否最佳:Mysql:执行的不存在。有可能提高性能吗?,mysql,performance,not-exists,Mysql,Performance,Not Exists,我有两个表帖子和评论。表注释具有post\u id属性。我需要获取所有类型为“open”的帖子,其中没有类型为“good”且创建日期为5月1日的评论 使用这样的SQL查询是否最佳: SELECT posts.* FROM posts WHERE NOT EXISTS ( SELECT comments.id FROM comments WHERE comments.post_id = posts.id AND comments.comment_type = 'good' AND c
SELECT posts.* FROM posts
WHERE NOT EXISTS (
SELECT comments.id FROM comments WHERE comments.post_id = posts.id
AND comments.comment_type = 'good' AND
comments.created_at BETWEEN '2010-05-01 00:00:00' AND '2010-05-01 23:59:59')
我不确定“不存在”在这种情况下是否是完美的结构。你是对的-你可以做得更好。有关详细信息,请参见,但结论是: 这就是为什么在MySQL中搜索缺失值的最佳方法是使用LEFT JOIN/is NULL或NOT in而不是NOT EXISTS 使用
不在中重写的查询可能如下所示:
SELECT *
FROM posts
WHERE posts.id NOT IN (SELECT post_id
FROM comments
WHERE comments.comment_type = 'good'
AND comments.created_at BETWEEN '2010-05-01 00:00:00'
AND '2010-05-01 23:59:59')
不知道是否更快,您可以查看:
SELECT * FROM posts
LEFT JOIN comments
ON comment.postid = post.id
AND comment.comment_type='good'
WHERE comment.postid IS NULL
假设postid从不为空/不可为空的列