Quelques fois il peut être utile de forcer le moteur à recalculer la sélectivité des index afin de permettre à l'optimiseur de choisir des meilleurs plans de requête et donc de faire les traitements plus rapidement

Voici une procédure permettant de recalculer la selectivité de tous les index

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
SET TERM ^;
 CREATE PROCEDURE SP_CALCSELECTIVITY
  AS
  DECLARE VARIABLE IDX VARCHAR(50);
  DECLARE VARIABLE STMT VARCHAR(75);
  BEGIN
   FOR
    SELECT RDB$INDEX_NAME
      FROM RDB$INDICES
    INTO :IDX
   DO
    BEGIN
     STMT = 'SET STATISTICS INDEX ' || :IDX;
     EXECUTE STATEMENT :STMT;
    END
  END ^
  SET TERM ;^

Ensuite il suffit de faire :

1
EXECUTE PROCEDURE SP_CALCSELECTIVITY;

Bien sûr il est préférable de faire cela à un moment où le serveur n'est pas trop occupé.