Bonjour à tous,

Je souhaiterais optimiser le temps d'exécution d'une requête contenant plusieurs sous-requêtes en UNION ALL et j'aurais besoin de savoir où il est préférable de placer ma ou mes clauses WHERE pour restreindre la profondeur de l'historique retourné.

Je suis certain que ma question est très basique, et je pourrais évidemment faire le test en réel, mais comme le temps d'exécution actuel de ma requête est de plus de 3 heures, mes tests risquent d'être très longs... Donc j'apprécierais vraiment votre aide svp.

Donc, est-il plus rapide de faire ceci (une seule clause WHERE dans la requête principale) :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
SELECT req.champ1, req.annee_creation
FROM (
  SELECT champ1, annee_creation
  FROM table1
  UNION ALL
  SELECT champ1, annee_creation
  FROM table2
) req
WHERE req.annee_creation = 2020;
Ou bien ceci ? (une clause WHERE dans chaque sous-requête) :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
SELECT req.champ1, req.annee_creation
FROM (
  SELECT champ1, annee_creation
  FROM table1
  WHERE annee_creation = 2020
  UNION ALL
  SELECT champ1, annee_creation
  FROM table2
  WHERE annee_creation = 2020
) req;
Merci d'avance pour votre aide.

Bonne journée.