J'ai une table, Foo. Je lance une requête sur Foo pour obtenir les identifiants d'un sous-ensemble de Foo. Je veux ensuite exécuter un ensemble de requêtes plus compliqué, mais uniquement sur ces ID. Y a-t-il un moyen efficace de le faire? Le mieux que je puisse penser est de créer une requête telle que:sql choisir parmi un grand nombre d'ID
SELECT ... --complicated stuff
WHERE ... --more stuff
AND id IN (1, 2, 3, 9, 413, 4324, ..., 939393)
C'est-à-dire, je construis une énorme clause "IN". Est-ce efficace? Existe-t-il un moyen plus efficace de le faire, ou est le seul moyen de JOIN à la requête inital qui obtient les ID? Si cela aide, j'utilise SQLObject pour me connecter à une base de données PostgreSQL, et j'ai accès au curseur qui a exécuté la requête pour obtenir tous les ID. MISE À JOUR: Je dois mentionner que les requêtes les plus complexes reposent toutes sur ces ID ou créent plus d'ID à rechercher dans les autres requêtes. Si je devais faire une grande requête, je finirais par rejoindre six tables à la fois, ce qui pourrait être trop lent.
Y a-t-il une différence entre faire cela et créer une vue temporaire? – Claudiu
continuera à exécuter la requête, mais une table temporaire stocke simplement les résultats? ressemble à ce que je veux est ce dernier – Claudiu
En créant une table temporaire, les résultats réels eux-mêmes sont spoulés, de sorte que la recherche potentiellement compliquée n'est exécutée qu'une seule fois. Avec une vue temporaire, les conditions de recherche seraient transférées dans chaque déclaration suivante. Si vos conditions de recherche sont simples, une vue peut être plus efficace. Si elles sont très complexes, la matérialisation des résultats dans une table temporaire sera gagnante. Je commencerais naturellement par utiliser une table temporaire, et peut-être que l'application conduisant cette utilisation une vue temporaire si elle détermine que les conditions de recherche sont assez simples par une règle empirique. – araqnid