II Optimisation et plan d’exécution
1. Le nom et prénom du client numéro 5.
SELECT cli_nom, cli_prenom
FROM client
WHERE client.cli_id=5;
Ici avec un select oracle parcourt toutes les lignes de la table client pour
trouver un client qui a un id=5, le cout de la requête est 3
2. Les jours où le client numéro 5 a occupé une chambre.
SELECT JOUR
FROM occupation
WHERE cli_id=5;
Ici avec un select oracle parcourt toutes les lignes de la table occupation
pour trouver les jours où le client qui a un id=5 a réservé une chambre, le
cout de la requête est 11
3. Les chambres occupées le 22/01/1999.
SELECT chb_id
FROM occupation
WHERE jour='1999-01-22';
Ici avec un select oracle parcourt toutes les lignes de la table occupation
pour trouver les chambres qui ont été réservées le 22/01/1999, le cout de
la requête est 11
4. Le nom et prénom des clients ayant pris une chambre le 22/01/1999.
SELECT cli_nom, cli_prenom
From client, occupation
WHERE occupation.cli_id = client.cli_id
AND occupation.jour='1999-01-22';
Ici avec un select parcourant toutes les lignes des tables sélectionnées, il y
a eu un hachage/jointure impliquant les tables client et occupation dans
laquelle on sélectionne les clients qui ont réservé une chambre les
22/01/1999
Cout 14 pour le select
14 pour le hachage
11 pour le premier sous select
Et 3 pour le deuxième sous select
B
CREATE INDEX CLIENT_CLI_ID ON client (cli_id);
CREATE INDEX OCCUPATION_CLI_ID ON occupation (cli_id);
CREATE INDEX OCCUPATION_JOUR ON occupation (jour);
Après la création des indexes, on remarque qu’il y a réduction des coûts
III Contraintes
CREATE TABLE CLIENT
(
CLI_ID NUMBER(5,0),
TIT_CODE VARCHAR2(10),
CLI_NOM VARCHAR2(30),
CLI_PRENOM VARCHAR2(30),
CLI_ENSEIGNE VARCHAR2(50),
CONSTRAINT PK_Client PRIMARY KEY (ClI_ID)
);
CREATE TABLE OCCUPATION
(
CHB_ID NUMBER(3,0),
JOUR VARCHAR2(10),
CLI_ID NUMBER(3,0),
NB_PERS NUMBER(2,0),
RESERVE NUMBER(1,0) DEFAULT 0,
CONSTRAINT FK_Occupation FOREIGN KEY (CLI_ID)
REFERENCES CLIENT(CLI_ID)
);
insert into CLIENT (CLI_ID, TIT_CODE, CLI_NOM, CLI_PRENOM) values ( 1, 'M.',
'DUPONT', 'Alain');
insert into OCCUPATION (CHB_ID, JOUR, CLI_ID, NB_PERS, RESERVE) values ( 3,
'1999-01-02', 67, 3, 1);
1.code
CREATE VIEW V_ClientsVIP
AS SELECT cli_id,count(*) "nb_occupation"
FROM occupation
GROUP by cli_id
having count(*) >100;