J'ai une relation 1: 1 entre deux tables. Je veux trouver toutes les lignes du tableau A qui ne sont pas une ligne correspondante dans le tableau B. J'utilise cette requête:Comment trouver des lignes dans une table qui n'ont pas de ligne correspondante dans une autre table
SELECT id
FROM tableA
WHERE id NOT IN (SELECT id
FROM tableB)
ORDER BY id desc
id est la clé primaire dans les deux tableaux. En dehors des indices de clés primaires, j'ai aussi un index sur tableA (id desc). En utilisant H2 (base de données Java intégrée), ceci entraîne un balayage de table complet de la table B.
Je veux éviter une analyse de table complète.
Comment puis-je réécrire cette requête pour qu'elle s'exécute rapidement? Quel indice devrais-je devoir?
chaque fois que vous écrivez 'WHERE col [NOT] IN (SELECT COL FROM othertable)', il est préférable de refactoriser en utilisant [NOT] EXISTS. – topchef