URL: https://linuxfr.org/forums/programmation-sql/posts/performances-de-join-exists-sur-postgres Title: performances de JOIN / EXISTS sur postgres Authors: PyroTokyo Date: 2012年06月04日T09:40:56+02:00 Tags: Score: 0 Bonjour tout le monde. Juste une petite chose qui me turlupine, parce que ca me plombe mes performances de facon assez phenomenale. Je suis sous Postgres, et je dispose de 2 tables, user et email. User contient environ 40 millions d'entrees, et email 40000 environ (base en pleine construction, donc pas encore enorme). J'ai envie de repertorier les utilisateurs ayant envoye ou recu des messages. Mon ORM me genere la requete suivante (SQLAlchemy) select user.id from user where exists (select 1 from email where user.id = email.source_id) or exists (select 1 from email where user.id = email.target_id) Moi je veux bien, mais j'ai lance la requete il y a 15 minutes, et elle vient de se terminer avec 32000 resultats. Enlever une des 2 clauses exists me donne un temps d'execution de 20 secs environ. Passer par un join du type select distinct(user.id) from user, email where email.source_id = user.id or email.target_id = user.id Me donne le resultat en 25 secs environ avec egalement 32000 lignes. Il y a vraiment un probleme avec le exists ou alors ca vient de moi qui ai loupe quelque chose ? je precise que pour user.id est primaire avec un index, source_id et target_id sont des FK avec un index egalement, tout le monde ayant une contrainte NOT NULL.