Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql:执行的不存在。有可能提高性能吗?_Mysql_Performance_Not Exists - Fatal编程技术网

Mysql:执行的不存在。有可能提高性能吗?

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

我有两个表帖子评论。表注释具有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 
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从不为空/不可为空的列