Bonjour,

Désolé si ma question est idiote.
J'ai utilisé la recherche avec les mots «index» et «primary» et je n'ai pas trouvé ce que je voulais.

La situation: J'ai une table énorme avec un index unique, des index dupliqués
et une primary key.

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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
 
CREATE TABLE VENTCLI
(
  CMAG_VENTCLI        CHAR(5)                   NOT NULL,
  CPRP_VENTCLI        CHAR(6)                   NOT NULL,
  DATE_VENTCLI        DATE                      NOT NULL,
  QTE_VENDU_VENTCLI   NUMBER(8,3),
  TVA_VENTCLI         NUMBER(5,2),
  PRIX_ACHAT_VENTCLI  NUMBER(8,2),
  PRIX_VENTE_VENTCLI  NUMBER(8,2),
  CA_VENTCLI          NUMBER(10,2)
)
TABLESPACE USERS
PCTUSED    40
PCTFREE    10
INITRANS   1
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            MINEXTENTS       1
            MAXEXTENTS       2147483645
            PCTINCREASE      0
            FREELISTS        1
            FREELIST GROUPS  1
            BUFFER_POOL      DEFAULT
           )
LOGGING 
NOCACHE
NOPARALLEL;
 
 
CREATE INDEX IND1_VENTCLI ON VENTCLI
(CMAG_VENTCLI)
LOGGING
TABLESPACE INDX
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            MINEXTENTS       1
            MAXEXTENTS       2147483645
            PCTINCREASE      0
            FREELISTS        1
            FREELIST GROUPS  1
            BUFFER_POOL      DEFAULT
           )
NOPARALLEL;
 
 
CREATE INDEX IND2_VENTCLI ON VENTCLI
(CPRP_VENTCLI)
LOGGING
TABLESPACE INDX
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            MINEXTENTS       1
            MAXEXTENTS       2147483645
            PCTINCREASE      0
            FREELISTS        1
            FREELIST GROUPS  1
            BUFFER_POOL      DEFAULT
           )
NOPARALLEL;
 
 
CREATE INDEX IND3_VENTCLI ON VENTCLI
(DATE_VENTCLI)
LOGGING
TABLESPACE INDX
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            MINEXTENTS       1
            MAXEXTENTS       2147483645
            PCTINCREASE      0
            FREELISTS        1
            FREELIST GROUPS  1
            BUFFER_POOL      DEFAULT
           )
NOPARALLEL;
 
 
CREATE UNIQUE INDEX PK_VENTCLI ON VENTCLI
(CMAG_VENTCLI, CPRP_VENTCLI, DATE_VENTCLI)
LOGGING
TABLESPACE INDX
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            MINEXTENTS       1
            MAXEXTENTS       2147483645
            PCTINCREASE      0
            FREELISTS        1
            FREELIST GROUPS  1
            BUFFER_POOL      DEFAULT
           )
NOPARALLEL;
 
 
ALTER TABLE VENTCLI ADD (
  CONSTRAINT PK_VENTCLI PRIMARY KEY (CMAG_VENTCLI, CPRP_VENTCLI, DATE_VENTCLI)
    USING INDEX 
    TABLESPACE INDX
    PCTFREE    10
    INITRANS   2
    MAXTRANS   255
    STORAGE    (
                INITIAL          64K
                MINEXTENTS       1
                MAXEXTENTS       2147483645
                PCTINCREASE      0
                FREELISTS        1
                FREELIST GROUPS  1
               ));
Le problème: Je voudrais gagner de la place dans cette base.
Les questions:
- Si on utilise un index unique, à quoi sert la primary key puisque la contrainte d'unicité est assurée par l'index?
- Est-il normal, comme dans mon cas, de donner le même nom d'objet à la primary key et à l'index unique ou est-ce une erreur de design?
- Index dupliqués, sont ils utiles dans mon cas, puisque l'index unique est la concaténation de ceux-ci?
- La question qui résume tout: Si je supprime la primary key et les index dupliqués est-ce que ça marchera beaucoup moins bien?

Merci,

Patrick