La sous-requête SQL NOT IN entraîne une dégradation des performances
P粉6961462052023-09-12 12:21:35
0
2
616
Je souhaite utiliser un formulaire pour vérifier les rues.
La requête n'est pas optimale
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;
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.
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;
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.
LesIndex
post_plz (adress, plz)
和adress (strasse, plz, id)
doivent être optimisés.Vous pouvez essayer d'utiliser une jointure à gauche entre la table et vérifier les valeurs qui ne correspondent pas
Vous pouvez essayer d'utiliser la jointure gauche entre les tables et vérifier les valeurs qui ne correspondent pas