Bonjour.
J'ai besoin d'un peux d'aide pour optimiser une table que j'ai créé ainsi que la requête que j'exécute dessus.
Tous d’abord, voici m'as table:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| CREATE TABLE TOTO
(
ID_TOTO NUMBER NOT NULL,
DATE_TOTO DATE NOT NULL,
ID_LIB1 NUMBER(3) NOT NULL,
NOM_ LIB1 VARCHAR2(50 BYTE) NOT NULL,
NO_ CARTE1 NUMBER(3) NOT NULL,
NO_ CARTE2 NUMBER(3) NOT NULL,
NO_ CARTE3 NUMBER(5) NOT NULL,
ID_LIB2 NUMBER(5),
NOM_ LIB2 VARCHAR2(50 BYTE),
ID_ LIB3 NUMBER(3),
NOM_ LIB3 VARCHAR2(50 BYTE),
ID_ LIB4 NUMBER(6),
NOM_ LIB4 VARCHAR2(50 BYTE)
) |
Je vous explique 2-3 choses :
- ID_TOTO est l’identifiant de la table (n° de ligne)
- Je crée cette table à partir de plusieurs autres tables :
TABLE LIB1(ID_TOTO, ID_LIB1, NOM_ LIB1)
TABLE LIB2(ID_TOTO, ID_LIB2, NOM_ LIB2)
TABLE LIB3(ID_TOTO, ID_LIB3, NOM_ LIB3)
TABLE LIB4(ID_TOTO, ID_LIB4, NOM_ LIB4)
Je fais ensuite une requête selon les choix que fond les utilisateurs selon date_toto, no_carte1, no_carte2, no_carte3, id_lib1, id_lib2, id_lib3, id_lib4
Exemple de requête :
Select DATE_TOTO, NO_ CARTE1, NO_ CARTE2, NO_ CARTE3, NOM_ LIB1, NOM_ LIB2, NOM_ LIB3, NOM_ LIB4 from TOTO where no_carte1=33 and no_carte2=10 and no_carte3=28 and (id_lib1=22 or id_lib1=23) and id_lib3=24 and id_lib4=32 and date_toto between 10/01/2008 and 20/01/2008
Dernière précision :
- tous ces champs peuvent être renseigné ou non la requête se construisant selon les choix renseigné
- les champs retournés son toujours les mêmes (DATE_TOTO, NO_ CARTE1, NO_ CARTE2, NO_ CARTE3, NOM_ LIB1, NOM_ LIB2, NOM_ LIB3, NOM_ LIB4)
- il y a un choix multiple sur LIB1, 2 ,3 et 4
- un choix unique sur NO_ CARTE1, 2 et 3
- la date si elle est renseigné et toujours choisit sur un intervalle ( between ‘date_min’ and ‘date_max’)
- chose qui a sont importance, la table toto comporte environ 10 millions d’enregistrement
M’as 1er question est donc comment puis-je améliorer m’as table :
- je vois déjà la primary key : CONSTRAINT TABPASSAGES PRIMARY KEY (ID_PASSAGES) USING INDEX TABLESPACE USER_INDEXES
- et au niveau des index, je n’y connais rien je dirais qu’il faut en mettre sur LIB1, 2 ,3 et 4, NO_ CARTE1, 2 et et la date, mais comment et dans quelles ordre ?
M’as 2ème question est comment améliorer m’as requête :
- y a-t-il un ordre dans la disposition des champs dans le ‘where’ ou cela ne change t’il rien ?
Je me rends compte que c’est un peu confus, j’espère ne pas vous avoir perdu en route et que vous pourrais m’aider.
Bonne journée.
sdisp
Partager