Mysql 用JOIN语句替换“IN”

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

我从Access迁移到MySQL时又遇到了麻烦

以下SQL语句在Access中运行良好:


在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;