搜索

首页  >  问答  >  正文

SQL NOT IN子查询导致性能下降的问题

我想使用表格来检查街道。

  1. 查询不是最优的
  2. 查询时间太长

有人可以帮助我吗

SELECT id, strasse, plz
FROM `adress`
WHERE strasse NOT IN (
    SELECT street
    FROM post_plz
    WHERE `street` like adress.strasse AND plz like adress.plz
)
LIMIT 5;

P粉696146205P粉696146205481 天前640

全部回复(2)我来回复

  • P粉015402013

    P粉0154020132023-09-13 10:59:58

    SELECT id, strasse, plz
    FROM adress
    WHERE NOT EXISTS ( SELECT NULL
                       FROM post_plz
                       WHERE post_plz.street = adress.strasse 
                         AND post_plz.plz = adress.plz )
    -- ORDER BY {expression}  
    LIMIT 5
    

    没有使用ORDER BY时,查询结果是非确定性的(两次查询可能产生不同的结果)。因此强烈建议添加一些行排序。

    索引post_plz (adress, plz)adress (strasse, plz, id)必须进行优化。

    回复
    0
  • P粉739079318

    P粉7390793182023-09-13 10:43:25

    You could try using aleft join between the table and check for not mactching values

    SELECT id, strasse, plz 
    
    from `adress` 
    left join  post_plz on strasse = street
      AND `street` like adress.strasse 
        AND plz like adress.plz
    WHERE street is null
     LIMIT 5;

    你可以尝试在表之间使用左连接,并检查不匹配的值

    SELECT id, strasse, plz 
    
    from `adress` 
    left join  post_plz on strasse = street
      AND `street` like adress.strasse 
        AND plz like adress.plz
    WHERE street is null
     LIMIT 5;

    回复
    0
  • 取消回复