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:
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 mouvement contient environ 25000 enregistrements.
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 :
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
Le temps d'exécution est de quelques secondes.
Je ne comprends pas cette différence de temps d'exécution.
Quelqu'un pourrait me l'expliquer?