你已經在標題中回答了你自己的問題。一般來說,MySQL不優化IN (Subquery)
以及連接,以便您將使用JOIN
SELECT *
FROM tbl_content t1
INNER JOIN
( SELECT ContentID
FROM tbl_tags t1
INNER JOIN
( SELECT Bezeichnung
FROM tbl_tags t2
WHERE t2.contentID = " & contentID & "
GROUP BY Bezeichnung
) t2
ON t1.Bezeichnung = t2.Bezeichnung
WHERE contentID <> " & contentID & "
GROUP BY ContentID
) t2
ON t2.ContentID = t1.ContentID
WHERE Status = 1
ORDER BY Datum DESC LIMIT 0,5;
同時檢查相關的列索引來提高性能會更好。
編輯
而且我越覺得EXISTS
可以在MySQL中是更有效的是,但EXPLAIN
應該表現出更多:
SELECT *
FROM tbl_content t1
WHERE EXISTS
( SELECT 1
FROM tbl_tags t2
WHERE EXISTS
( SELECT 1
FROM tbl_tags t3
WHERE t2.contentID = " & contentID & "
AND t2.Bezeichnung = t2.Bezeichnung
)
AND t1.ContentID = t2.ContentID
)
AND Status = 1
AND t1.contentID <> " & contentID & "
ORDER BY Datum DESC LIMIT 0,5;
把'EXPLAIN'放在'SELECT'之前。向我們顯示輸出。同時顯示「CREATE TABLE tbl_content」的輸出。 – Konerak 2012-02-28 09:57:46
可能您在Access數據庫中沒有您的MySQL上的某些索引。 – AngeloBad 2012-02-28 09:55:33