recherche

Maison  >  Questions et réponses  >  le corps du texte

La sous-requête SQL NOT IN entraîne une dégradation des performances

Je souhaite utiliser un formulaire pour vérifier les rues.

  1. La requête n'est pas optimale
  2. Le temps de requête est trop long

Quelqu'un peut-il m'aider

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粉696146205444 Il y a quelques jours617

répondre à tous(2)je répondrai

  • 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
    

    Lorsque ORDER BY n'est pas utilisé, les résultats de la requête sont non déterministes (deux requêtes peuvent produire des résultats différents). Il est donc fortement recommandé d'ajouter un tri de lignes.

    Les

    Indexpost_plz (adress, plz)adress (strasse, plz, id)doivent être optimisés.

    répondre
    0
  • P粉739079318

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

    Vous pouvez essayer d'utiliser une jointure à gauche entre la table et vérifier les valeurs qui ne correspondent pas

    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;

    Vous pouvez essayer d'utiliser la jointure gauche entre les tables et vérifier les valeurs qui ne correspondent pas

    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;

    répondre
    0
  • Annulerrépondre