Mysql 用JOIN语句替换“IN”
我从Access迁移到MySQL时又遇到了麻烦 以下SQL语句在Access中运行良好:Mysql 用JOIN语句替换“IN”,mysql,sql,ms-access,Mysql,Sql,Ms Access,我从Access迁移到MySQL时又遇到了麻烦 以下SQL语句在Access中运行良好: 在MySQL中,性能非常慢。有什么帮助的想法吗?您已经在标题中回答了自己的问题。一般来说,MySQL不会在子查询和联接方面进行优化,因此使用联接会更好 MySQL在子查询方面有一个已知的问题,每次比较外部查询时,它都会对它们进行评估。避开他们!这可能就是您看到Access性能下降的原因。可能您在MySQL上有一些Access数据库上没有的索引。请在选择之前添加解释。向我们展示输出。还显示创建表tbl_内容的
在MySQL中,性能非常慢。有什么帮助的想法吗?您已经在标题中回答了自己的问题。一般来说,MySQL不会在子查询和联接方面进行优化,因此使用联接会更好
MySQL在子查询方面有一个已知的问题,每次比较外部查询时,它都会对它们进行评估。避开他们!这可能就是您看到Access性能下降的原因。可能您在MySQL上有一些Access数据库上没有的索引。请在选择之前添加解释。向我们展示输出。还显示创建表tbl_内容的输出。
SELECT *
FROM tbl_content
WHERE contentID IN (
SELECT contentID
FROM tbl_tags
WHERE Bezeichnung IN (
SELECT Bezeichnung
FROM tbl_tags t2
WHERE t2.contentID= " & contentID & ")
AND contentID <> " & contentID & ")
AND Status = 1
ORDER BY Datum DESC LIMIT 0,5;
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;
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;