Il s'agit de DB2.
D'où provient cette liste de plusieurs milliers de nombres ?
L'idéal serait de faire une table, fut-elle temporaire, contenant en une seule colonne tous ces nombres à rechercher, d'indexer cette colonne puis de faire une jointure avec la table temporaire.
Si cette solution est impossible, dans la mesure où il y a un index sur c3, peut-être qu'en triant la liste dans l'ordre ascendant accélérerait un peu les choses.
C'est une liste renvoyée par une fonction java.
Cette fonction construit la liste à partir d'une requête SQL.
J'ai bien essayé d'injecter cette requête dans la requête principale en faisant quelque chose de ce genre:
SELECT * FROM T WHERE c1 = 5448 AND c2 = 2 AND c3 IN (SELECT id from T2 where ...)
Mais au final c'est encore plus lent.
Je vais essayer de trier au préalable cette liste, ça me parait pas bête comme idée. Je vous tiens au courant lundi.
Partager