Bonjour,

Je rencontre de gros problèmes de performances avec une de mes procs.
Voilà résumé le problème :
Le gros de cette proc est d'insérer dans une table via un curseur.
Comme vous pouvez le voir plus bas, une jointure a été supprimée (AND ACTNAIRE_NOMI.CD_VALEUR = @CD_VALEUR). Cette jointure apparaissait à plusieurs endroits de la proc, et depuis les performances ont chuté.
Il n'y avait pas d'index portant sur cette colonne mais pourtant les perf étaient bonnes. Mais depuis qu'on a supprimé cette jointure, sans toucher aux indexs, les perfs ont chuté.

Pouvez-vous m'aider ? Merci

Pour les courageux je peux envoyer le script complet de la proc

Exemple d'un bout de la proc :
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
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
 
DECLARE cur_nomi CURSOR
FOR
SELECT  ID_NOMINATIF,
        ID_TYPE_PROP,
        ID_CIVIL,
        NOM,
        PRENOM,
        BATIMENT,
        RUE,
        COMPLEMENT,
        CODE_POSTAL,
        VILLE,
        PAYS,
        NB_ACT_VS,
        NB_ACT_VP,
        REF_SOCIETE,
        REF_SALARIE,
        CD_REG_COU,
        CD_SS_REG_COU,
        CD_VALEUR,
        ADRE_PAYS_IDEN,
        IND_BLOCAGE,
        LANG
 
FROM    NOMINATIF_TRANSIT
        WHERE ID_ASS_GEN  = @ID_ASS_GEN
          AND CD_COMPUTER = @CD_COMPUTER
          AND CD_USER     = @CD_USER
 
 
open cur_nomi
fetch cur_nomi into @ID_NOMINATIF,
                    @ID_TYPE_PROP,
                    @ID_CIVIL,
                    @NOM,
                    @PRENOM,
                    @BATIMENT,
                    @RUE,
                    @COMPLEMENT,
                    @CODE_POSTAL,
                    @VILLE,
                    @PAYS,
                    @NB_ACT_VS,
                    @NB_ACT_VP,
                    @REF_SOCIETE,
                    @REF_SALARIE,
                    @CD_REG_COU,
                    @CD_SS_REG_COU,
                    @CD_VALEUR,
                    @ADRE_PAYS_IDEN,
                    @IND_BLOCAGE,
                    @LANG
 
 
/* Boucle sur les lignes */
WHILE @@sqlstatus = 0
BEGIN
 
   /* Recherche dans la base des infos existantes concernant cet actionnaire */
   SELECT   @ID_ACTNAIRE      = ACTNAIRE.ID_ACTNAIRE,
            @ID_ACTNAIRE_NOMI = ACTNAIRE_NOMI.ID_ACTNAIRE,
            @NB_ACT_VS_OLD    = ACTNAIRE_NOMI.NB_ACT_VS,
            @NB_ACT_VP_OLD    = ACTNAIRE_NOMI.NB_ACT_VP
 
   FROM   ACTNAIRE, ACTNAIRE_NOMI
 
   WHERE ACTNAIRE.ID_ASS_GEN        =  @ID_ASS_GEN
   AND   ACTNAIRE.ID_NOMINATIF      =  @ID_NOMINATIF
   AND   ACTNAIRE_NOMI.ID_ASS_GEN   =  @ID_ASS_GEN
   AND   ACTNAIRE_NOMI.ID_ACTNAIRE  =  ACTNAIRE.ID_ACTNAIRE
   AND   ACTNAIRE_NOMI.ID_TYPE_PROP =  @ID_TYPE_PROP
   -- Supression du contrôle sur le code valeur
   -- AND   ACTNAIRE_NOMI.CD_VALEUR    =  @CD_VALEUR