Je voudrais faire une requête qui me retourne les stocks qui n'ont pas eu de mouvements entre 2 dates.
Voici mon 1er essai:
La table mouvement contient environ 25000 enregistrements.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 select stock_ID from Stock where stock_ID not in ( select Stock_ID from Mouvement where DateMvt>DateMin and DateMvt<=DateMax )
La table stock contients environs 4000 enregistrements.
Le champ stock_ID de la table Mouvement est indexé.
Le temps d'exécution de la requête est d'1 minute environ. C'est assez énorme pour moi.
J'ai donc fait un essais avec une procédure stockée:
Contenu de la procédure :
Le temps d'exécution est de quelques secondes.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 declare Ok integer; begin for select Stock_ID from Stock into :Stock_ID do begin select Count(*) from Mouvement_Stock where Stock_ID=:Stock_ID into :Ok; if (Ok>=1) then suspend; end end
Je ne comprends pas cette différence de temps d'exécution.
Quelqu'un pourrait me l'expliquer?
Partager