我需要一個快速顯示用戶沒有上傳PDF的特定模塊(文章的子集)內的文章的查詢。我在下面使用的查詢大約需要37秒,因爲文章表中有300,000篇文章,模塊中有6,000篇文章。需要幫助加快MySQL查詢
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
而不是顯示在同一頁中的所有文章我認爲一個好方法是實現一個分頁腳本..並顯示每個頁面20-30行..這將更快更快 –
你嘗試看看解釋計劃爲了這?你的鑰匙是什麼?嘗試顛倒你的表中的順序也加入 –
你在a.id,amm.article,afm.article的數據庫表上有索引嗎? – Adder