Une histoire d'index et de primary key
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:
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