我需要一个查询来快速显示用户尚未为其上传 PDF 的特定模块(文章的子集)中的文章。我在下面使用的查询大约需要 37 秒,因为文章表中有 300,000 篇文章,模块中有 6,000 篇文章。
SELECT *
FROM article a
INNER JOIN article_module_map amm ON amm.article=a.id
WHERE amm.module = 2 AND
a.id NOT IN (
SELECT afm.article
FROM article_file_map afm
INNER JOIN article_module_map amm ON amm.article = afm.article
WHERE afm.organization = 4 AND
amm.module = 2
)
我在上述查询中所做的是首先将文章列表截断为所选模块,然后进一步将该列表截断为不在子查询中的文章。子查询正在生成组织已为其上传 PDF 的文章列表。因此,最终结果是组织尚未上传 PDF 的文章列表。
非常感谢您的帮助,在此先感谢!
编辑 2012/10/25
在@fthiella 的帮助下,下面的查询运行了惊人的 1.02 秒,低于 37+ 秒!
SELECT a.* FROM (
SELECT article.* FROM article
INNER JOIN article_module_map
ON article.id = article_module_map.article
WHERE article_module_map.module = 2
) AS a
LEFT JOIN article_file_map
ON a.id = article_file_map.article
AND article_file_map.organization=4
WHERE article_file_map.id IS NULL