タイトルにあなた自身の質問に答えました。一般的に言えば、MySQLはまた、関連する列は、パフォーマンスの向上のためにインデックス化されていることを確認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;
を使用したほうが良いでしょうとしてもそうジョインとしてIN (Subquery)
を最適化しません。
EDIT
さらにより多くの私は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;
'SELECT 'の前に' EXPLAIN 'を置きます。出力を表示します。 'CREATE TABLE tbl_content'の出力も表示してください。 – Konerak
おそらくあなたはあなたのAccessデータベースにないMySQLのインデックスを持っています。 – AngeloBad