Académique Documents
Professionnel Documents
Culture Documents
Resumé OPT BD
Resumé OPT BD
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
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 ;
Modifier/Supprimer index :
- Rendre le visible/invisble : Alter index ‘index_name’ visible/invisible
- Suprimmer l’index : drop ‘index_name’
Sélectivité :
𝐶
- S= ; si S0 , 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;
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)
)
EX :
- 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
Syntaxe :
CREATE INDEX PRESIDENT_idx ON PRESIDENT (M_date) LOCAL;
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
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 :