我该如何修复这个SQL查询?

Ugu*_*zer 1 mysql sql phpmyadmin

执行下面的查询时面临"在查询期间丢失与MySQL服务器的连接"错误.我该怎么解决?

SELECT * 
FROM firmalar,
     musterisahipleri,
     notlar 
WHERE firmalar.firmaID NOT IN (
       SELECT m2.firmaID 
       FROM notlar AS n2,
            musterisahipleri AS m2
       WHERE n2.eklemeTarihi > '2013-03-24'
   ) 
   AND musterisahipleri.firmaID = firmalar.firmaID 
   AND notlar.ilgiliID = musterisahipleri.userID;
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助

Ste*_*ley 5

你正在超时,因为你使用效率低下的嵌套子查询.

这将表现得更好:

编辑:根据您的上次评论,此查询将返回自"2013-03-24"以来firmalar没有notlar添加记录的记录...然后将这些结果加入musterisahipleri并notlar再次获取相关的代表和备注(如果适用)

SELECT *
FROM (
    SELECT f.* 
    FROM firmalar AS f
    LEFT JOIN musterisahipleri AS m
        ON m.firmaID = f.firmaID
    LEFT JOIN notlar AS n
        ON n.ilgiliID = m.userID
        AND n.eklemeTarihi > '2013-03-24'
    GROUP BY f.firmaID
    HAVING MAX(n.ilgiliID) IS NULL
) AS f
    LEFT JOIN musterisahipleri AS m
        ON m.firmaID = f.firmaID
    LEFT JOIN notlar AS n
        ON n.ilgiliID = m.userID
Run Code Online (Sandbox Code Playgroud)

您还应该确保在要加入的列上有索引,例如

ALTER TABLE firmalar ADD INDEX (firmaID);
ALTER TABLE musterisahipleri ADD INDEX (firmaID);
ALTER TABLE musterisahipleri ADD INDEX (userID);
ALTER TABLE notlar ADD INDEX (ilgiliID);
Run Code Online (Sandbox Code Playgroud)

  • 斯威夫特,我只是打字这样的东西. (2认同)