Vous êtes sur la page 1sur 15

Optimisation des BDs

I. Généralités
Les étapes de traitement d’une requête :
- Analyse : Syntaxique et Sémantique
- Expression du plan d’exécution : choisir le chemin le plus optimisant
(EX : choisir entre JOIN et IN / jointure et nested loops)
- Exécute : exécution du plan d’exécution choisit.
- Affichage
OLAP VS OLTP :
OLAP (Online Analytic Process)  Dénormalisation
OLTP (Online Transaction Process)  Normalisation
Qu’est ce qu’il faut savoir avant optimiser une BD ?
- La fréquence de l’utilisation pendant un jour.
- Le type des requêtes (Select, Update, …)
- Mode d’exécution (itérative ou compilé )
RQ : temps d’accès = f(E,S)

II. INDEX
ROWID : est une pseudo colonne sert à adresser les lignes directement sans
avoir parcourir toutes la table.
Pour l’afficher : « select ROWID from ‘table_name’ ;
1. Mécanisme de la recherche par index B-Tree
Il est basé sur deux étapes :
- Traversé les pages de l’index : trav(I,K)
o Donne l’adresse d’une page P
o Traverse l’arbre jusqu’aux feuilles de l’index
- Accès direct à l’enregistrement : acces(P,K)
o Ouverture de la page
o Accès à l’enregistrement

2. Index non-dense (Clustered index)


- Un index non dense définie comment les données sont physiquement
stocké, alors on peut l’utilisé juste une fois.
- Un index non dense est créé automatiquement sur la clé primaire lors
de la création de la table.
- Il faut que la table soit trié sur la clé primaire alors on stock pour ne faire
figure dans l’index que les valeurs des clés des premiers enregistrements
de chaque bloc.
- En générale c’est plus efficace de l’utiliser si on veut retourner tous les
colonnes, car il accès directement à la valeur
- Il n’est pas efficace en cas de réarrangement
Recherche :
- Par clé : par dichotomie sur l’index
o Ex : x=45, recherche la borne 40, après recherche lin 40->45
- Par intervalle : recherche de la borne inferieure
o EX : 45≤x≤60, recherche la borne 40, après recherche lin -> 60
- Par préfixe : cas particulier de la recherche par index.
o EX : x = ‘personne commence avec A’

3. Index dense (non Clustered index)


C’est de baser l’index sur toutes les valeurs de la clé primaire exsitant :
Recherche :
- Par clé : comme l’index dense
- Par intervalle :
o Recherche de la borne inf.
o Parcours séquentiel dans l’index
o A chaque valeurs accès a le fichier donnée (i think it’s table xD)
o C’est très couteux
4. Classification des indexes
- Logique :
o La colonne unique ou concaténée.
o L’index est unique ou non unique :
 Unique == pas de valeurs dupliquer pour cet index
 Not unique == l’inverse
- Physique :
o Partitionnée ou pas (on va voir ça dans la partie suivante)
o Organisé en B-tree ou Bitmap
 Normal ou à clé inversée (juste pour B-Tree)
5. Index à clé inversée
Problème : les valeurs sont stocké avec un ordre croissant de la clé primaire
par exemple, alors pour afficher 3 valeurs proches (512, 580,599) existe
dans la même page on doit attendre 3*x, ou x est la valeur nécessaire pour
trouver une valeur.
Solution : si on renverse les valeurs de l’index ? on obtiendra : 215, 85, 995,
Qu’ils ne sont pas proche et existe dans des pages diffèrent, alors à l’aide du
RAC (Real Access Cluster) on peut faire des recherches simultanées sur des
pages différents

6. Index Bitmap
Le bitmap est utilisé lorsque la cardinalité est faible (nombre des valeurs
différents faible)
Les avantages :
- Prend moins d’espace dans le disque
- Efficace avec les clauses AND et OR
- Support les valeurs null
- Support l’utilisation de count( ).
Les inconvénients
- Pas efficace avec des grandes cardinalités
- Les mis à jours sont très chers
7. Index bitmap Joins
Ce type d’index est particulièrement intéressant lorsqu’on est besoin de
faire des jointures juste pour des conditions d’égalité
Exemple d’une requête utilise le Bitmap join :
- Select p.name from lig_cmd lc, produit p where p.id = lc.id and lc.qte =
10
PS : la syntaxe de la création sera dans la partie « Utilité et Pratique »
8. Index-Organized Table (IOT)
Les donnes elles même sont stocké dans une structure B-Tree triée sur la clé
primaire, alors l’accès à la table avec ce dernière est plus efficace car elle ne
nécessite pas l’accès à la table pour avoir les autres colonnes.
Avantages :
- Ce qui est dite au-dessus
- Accès avec intervalle de PK est aussi rapide
- Comme l’index et la table sur le même segment, moins d’espace est
utilisé.
Les inconvenants :
- Update et insert sont très couteuse car il déplace des lignes et non pas
juste clé dans des index
- Les index sur les autres colonnes nécessitent plus d’espace

9. Utilité et pratique
Activer ou désactiver le plan d’exécution :
o Set autot traceonly exp stat ;
o Set autot off
Afficher les index sur une table :
o Select index_name from all_indexes where table_name=’la_table’
Créer un index:
- B-Tree (par defaut)
o Create index ‘nom_d’index’ on ‘table_name’(‘column set’)
- Bitmap
o Create bitmap index ‘nom_d’index’ on
‘table_name’(‘column_set’)
- Bitmap join
o Create bitmap index ‘nom_index’ on ‘table_name’(‘column_set ‘)
from ‘table1’ T1, ‘table2’ T2 where T1.’column’ = T2.’column’ and
… <condintions>
- IOT
o Create table (
<table definition>
….
)
ORGANIZATION INDEX ;

- Full IOT creation syntax :


- CREATE TABLE locations
- (id NUMBER(10),
- description VARCHAR2(50) NOT NULL,
- map BLOB,
- CONSTRAINT pk_locations PRIMARY KEY (id)
- )
- ORGANIZATION INDEX
- TABLESPACE iot_tablespace
- PCTTHRESHOLD 20
- INCLUDING description
- OVERFLOW TABLESPACE overflow_tablespace;

Modifier/Supprimer index :
- Rendre le visible/invisble : Alter index ‘index_name’ visible/invisible
- Suprimmer l’index : drop ‘index_name’
Sélectivité :
𝐶
- S= ; si S0 , on choisit le Bitmap
𝑁−𝑁𝑉
10. Arbre du plan d’exécution
2 Childs :
o Nested Loops
o All Joins
o Minus
o Union
1 Child :
o Sorts
o Views
o TAIR (Table Access Index ROWID)
0 Child :
o TAF
o Index Scan
II. Partitionnement
But : divisé les un objet (table, index, …) logiquement pour pouvoir les
accéder simultanément avec le multithreading et réduire le temps.
Creation du tablespace :
CREATE TABLESPACE tbs1
DATAFILE 'tbs1_data.dbf'
SIZE 1m;

1. Les types de partitionnement


Par Liste de valeur :
- Une IOT ne peut pas être partitionné par liste de valeur
- Syntaxe :
Create table ‘table_name’ (
<table_definition>

)
PARTITION BY LIST (‘column_name’)(
PARTITION P1 VALUES (val11,val2,…),
PARTITION P2 VALUES (va12,va22,….) TABLESPACE ‘ts_name’,
PARTITION autre VALUES(DEFAULT)
)

PS : Default tablespace est USERS

Par Plage :
Create table ‘table_name’ (
<table_definition>

)
PARTITION BY RANGE (‘column_name’)(
PARTITION P1 VALUES LESS THAN VAL1,
PARTITION P2 VALUES LESS TAHN VAL2,
PARTITION autre VALUES LESS THAN (MAXVALUE)
)

EX :
CREATE TABLE (... )
PARTITION BY RANGE (Date_x) (
PARTITION R1 VALUES LESS THAN (to_date(‘01-01-15’),’DD-MM-YY’),
PARTITION Autres VALUES LESS THAN (MAXVALUE))
Par Intervalle:
- C’est une extension du partitionnement par rang, qui automatise le
partitionnement à base d’un delta donné
- Syntaxe :
Create table ‘table_name’ (
<table_definition>

)
PARTITION BY RANGE (‘column_name’)
INTERVAL (‘DELTA’)
STORES IN (TS1,TS2,TS3)
(
PARTITION P1 VALUES LESS THAN VAL1 tablespace TS1
)

EX :
Create table test(..)
Partition by range(salary)
Interval (500)(
Partition p1 values less than (1000)
Partition p2 values less than (1500)
Partition p3 values less than (2000)
Parittion autre values less than (MAXVALUES))

Par Hachage :
- Ce mode impose un nombre de partition de 2^n
- Quand on a pas une vision claire sur les critères de partitionnement on
laisse ça pour le système =D
- Syntaxe :
Create table ‘table_name’ (
<table_definition>

)
PARTITION BY RANGE (‘column_names’)
STORES IN (TS1,TS2)
(
PARTITION P1,
PARTITION P2
)

RQS:
o ‘columns_names’ ne peut pas être constitué de plus de 16
colonne, et ne peut pas utiliser les ROWID et UROWID
o Ce partitionnement peut avoir un seul attribut : l’espace de
stockage

2. Partitionnement composé
- C’est le partitionnement hybride
- Sous - Partitionnement avec template :
Create table ‘table_name’ (<table_definition>…)
PARTITION BY LIST(PAYS)
SUBPARTITION BY RANGE (NOCLIENT)
SUBPARTITION TEMPLATE(
SUBPARTITION Ancient VALUES LESS THAN (3000)
SUBPARTITION Recent VALUES LESS THAN (MAXVALUE)
)
(
PARTITION Clients_Amerique VALUES('USA', 'Canada','Brazil'),
PARTITION Clients_Europe VALUES ('Germany', 'United Kingdom','France','Italy'),
PARTITION Clients_Asie VALUES('Japan', 'China','India'),
PARTITION Clients_Autres VALUES(DEFAULT)
)

- Sous-Partitionnement par spécification individuel

Create table ‘table_name’ (<table_definition>…)


PARTITION BY RANGE(TIME_ID)
SUBPARTITION BY RANGE (CHANEL_ID)
(
PARTITION SALES_Q1 VALUES LESS THAN (TO_DATE('01-02-98','DD-MM-YY'))
PARTITION SALES_Q2 VALUES LESS THAN (TO_DATE('01-03-98','DD-MM-YY')) SUBPARTITIONS 8,
PARTITION SALES_Q3 VALUES LESS THAN (TO_DATE('01-04-98','DD-MM-YY')) (
SUBPARTITION CH_C,
SUBPARTITION CH_D,
SUBPARTITION CH_E
)
PARTITION SALES_Q4 VALUES(DEFAULT)
)
3. Partitionnement Système
Aucune règle n’est déclaré.
PARTITION BY SYSTEM(
PARTITION PART1,
PARTITION PART2
)
Insert into Matable_part partition (Part1) values (..);
Select * from Matable_part partition (Part1) where ..
4. Partitionnement par référence
- On peut partitionner une table en fonction d’un FK

EX :

On peut partitionner la table étudiant selon la filière, supposant que la


table filière est partitionné selon la filière.
Syntaxe :
CREATE TABLE (...)
PARTITION BY REFERENCE (Cle_Etrangere)

5. Manipulation des partitionnement


- Suppression
Alter table ‘table_name’
drop partition ‘partition_name’
- Ajout
Alter table ‘table_name’
add partition ‘partition_name’
Values less than (…)
- Fusion
Alter table ‘table_name’
Merge paritions p1,p2,p3
Into P tablespace TS1
UPDATE GLOBAL INDEXES //cause of rowid

- Modification
Alter table ‘table_name
Modify partition ‘partition_name’,
{add,drop} values (…)

- Tronquer
Alter table ‘table_name' truncate partition p1 reuse storage update
globale indexes

6. Partitionnement d’index
Locally partitioned index:
L’index est partitionné de la même manière que la table
Globally partitioned index :
L’index est partitionné indépendamment du table, il peut être
partitionné juste par range

PS : les indexes sont par défaut globally partitioned on one partition,


c.a.d il ne sont pas partitionnés xD

Syntaxe :
CREATE INDEX PRESIDENT_idx ON PRESIDENT (M_date) LOCAL;

CREATE INDEX PRESIDENT_idx ON PRESIDENT (M_date) GLOBAL


PARTITION BY RANGE (M_date)
(PARTITION pr_q1 VALUES LESS THAN (TO_DATE('01/04/2001', 'DD/MM/YYYY')),
PARTITION pr_q2 VALUES LESS THAN (TO_DATE('01/07/2001', 'DD/MM/YYYY')),
PARTITION pr_q4 VALUES LESS THAN (MAXVALUE)
);

III. Vue Materialisé


C’est comme une vue normal, mais il stock réellement les données.
Simple syntaxe :
Create materialized view VM as select (cols list) from tables …
Full syntaxe :
Create materialized view VM
PCTFREE 0
BUILD IMMEDIATE
REFRESH FAST on commit
with rowid
ENABLE QUERY REWRITE
as select (cols list) from tables …

Refresh :
Fast (incremental) : efficace, utilise des journaux specifique tracant les
modification de la table maitres
Complete : refresh complete en utilisant le select de definition de la VM
Force (default) : effectue un fast si possible, else effectue complete

IV. Cluster
Regroupement entre deux tables ;
est une jointure forte. C’est un objet qui est oriente pour des tables
ayant entre elles une relation maitre/details.
Stocker dans une même zone ces deux tables au lieu de les stocker dans deux
zones distinctes.
Satisfaire les requêtes de jointure

Creation et affectation d’index :


create cluster CLUS_CMD (NoCmd number) size 8k;
Create Index IDX_CLUS_CMD ON CLUSTER CLUS_CMD;
Create Table CMD_CLUS (
NOCMD NUMBER not null,
NOCLIENT NUMBER,
DATECOMMANDE DATE,
ETATCOMMANDE CHAR(1),
Constraint PK_clus_CMD primary key (NoCmd))
cluster CLUS_CMD(NoCmd);

V. Table externe
Une table externe a les caractéristique suiantes :
- Elle est en lecture seule
- ses meta-données sont stockées dans la base de données
- ses données sont stockées en dehors de la bd
- Les seules contraintes valides pour une table externe sont NULL,NOT
NULL et CHECK
- Autres props : utilisateur des clause clause_parallele et
clause_enable_disable.
- Il ne peut pas etres temporaire.
Creation d’une table externe :
Create table ( … ) ORGANIZATION EXTERNAL;
L eou les fichiers entrant dans la def d’une table ext doivent resider dans un
repertoire orcale prealablement defini et pour lequel on a le droit de
lecture:
1- creation du repetoir “directory” :
CREATE DIRECTORY dir3 as “C:\Directory” ;
2- creation de la table
Exemple de creation d’une table externe dans un fichier txt :

Vous aimerez peut-être aussi

  • Classes Abstraites
    Classes Abstraites
    Document49 pages
    Classes Abstraites
    Abetiou SN - سفيان ابطيو
    Pas encore d'évaluation
  • Cours Collections 211
    Cours Collections 211
    Document40 pages
    Cours Collections 211
    Abetiou SN - سفيان ابطيو
    Pas encore d'évaluation
  • Exercices Méthodologie de Projet
    Exercices Méthodologie de Projet
    Document4 pages
    Exercices Méthodologie de Projet
    Abetiou SN - سفيان ابطيو
    0% (1)
  • Exobadi
    Exobadi
    Document1 page
    Exobadi
    Abetiou SN - سفيان ابطيو
    Pas encore d'évaluation
  • Fuche Projet
    Fuche Projet
    Document3 pages
    Fuche Projet
    Abetiou SN - سفيان ابطيو
    Pas encore d'évaluation
  • Tpjava
    Tpjava
    Document1 page
    Tpjava
    Abetiou SN - سفيان ابطيو
    Pas encore d'évaluation
  • TP GPMC TP5 22-10-2018
    TP GPMC TP5 22-10-2018
    Document9 pages
    TP GPMC TP5 22-10-2018
    Abetiou SN - سفيان ابطيو
    Pas encore d'évaluation
  • TP Ad Sys GNS3 Configuration Routeur TP1 19-09-2018 - 2
    TP Ad Sys GNS3 Configuration Routeur TP1 19-09-2018 - 2
    Document4 pages
    TP Ad Sys GNS3 Configuration Routeur TP1 19-09-2018 - 2
    Abetiou SN - سفيان ابطيو
    Pas encore d'évaluation
  • Les Fichiers
    Les Fichiers
    Document16 pages
    Les Fichiers
    Abetiou SN - سفيان ابطيو
    Pas encore d'évaluation
  • TD1 2021 Java
    TD1 2021 Java
    Document3 pages
    TD1 2021 Java
    Abetiou SN - سفيان ابطيو
    Pas encore d'évaluation
  • 25 09 LangageC
    25 09 LangageC
    Document51 pages
    25 09 LangageC
    Abetiou SN - سفيان ابطيو
    Pas encore d'évaluation