Vous êtes sur la page 1sur 23

Les index - BDA(modifié)

Par le Groupe 01:


-N'TARE Ayétou Ella(MRI)
-HENOVI Alban (MRI)
-AYITEY Kodjo Josué (GL)
Plan de présentation 02/22

Introduction
Mise en contexte du projet pratique
Notes annexes
Développement
S1: Prise en main de l'algorithme B-Tree
S2 : Vue d'ensemble de la dernière partie
Classes et familles d'opérateurs
Index et collationnements
S3 : Examiner l'utilisation des index
Conclusion
01

Introduction
04/22
Mise en contexte du projet pratique
Notre projet pratique consiste à mettre en place une architecture
de BD capable de supporter un système de vote électronique.

Nous avons pris comme contexte, un projet de réalisation d'une


application de vote électronique pour désigner un délégué général de
l'Université de Lomé.

Ainsi, tout au long de la présentation, ce projet nous servira d'exemple


afin de mieux aborder la notion d'index.

Pour plus d'informations techniques sur ce projet, veuillez consulter le


contenu du dossier zippé LES_INDEX_GROUPE_01.zip.
05/22
Notes annexes
En termes simples, un index est un pointeur vers des données dans une
table. Il est très similaire à un index d'un livre.

Un index sert à accélérer les requêtes SELECT et les clauses WHERE,


cependant il ralentit la saisie des données, avec les instructions INSERT et
UPDATE.

Nous avons plusieurs types d'index : B-Tree, Hash, GiST, SP-GiST, BRIN,
GIN, et l'extension BLOOM. Mais dans notre étude, nous nous
concentrerons sur l'algorithme par défaut B-Tree.
02

Développement
S1: Prise en main de l'algorithme B-Tree

08/22
Prise en main de l'algorithme B-Tree
La création d'un index implique l'instruction CREATE INDEX, qui vous
permet de nommer l'index, de spécifier la table et la colonne ou les
colonnes à indexer, et d'indiquer si l'index est en ordre croissant ou
décroissant. La syntaxe de base de CREATE INDEX est la suivante.

CREATE INDEX index_name ON table_name(column_name);


Pratique :
Créer un index sur la colonne 'prenoms' de la table 'etudiants'
Créer un index sur la colonne 'genre' de la table 'delegues'
Exécuter la commande ' \d delegues; ' pour voir la structure de la
table 'delegues'. Que remarquez vous ?
09/22
Prise en main de l'algorithme B-Tree
Nous pouvons aussi spécifier le type d'index à créer en utilisant le mot-clé
USING. La syntaxe est la suivante(index_type étant le type d'index à
créer) :

CREATE INDEX index_name ON table_name USING index_type


(column_name);

Pratique :
Créer un index de type BTree sur la colonne 'informations' de la table
'filieres' .
Vérifier que l'index a bel et bien été créé.
Nous n'aurons pas besoin de cet index dans la suite du TP. Savez vous
comment la supprimer ?
10/22
Prise en main de l'algorithme B-Tree
Un index peut-être supprimé à l'aide de la commande PostgreSQL DROP.
Des précautions doivent être prises lors de la suppression d'un index, car
les performances peuvent être ralenties ou améliorées. La syntaxe de
base est la suivante :
DROP INDEX index_name;

Pratique :
Supprimer à présent l'index créé précédemment.
Vérifier si l'index a bel et bien été supprimé.

Dans la prochaine partie, nous verrons les index multicolonnes, les index
uniques, les index partiels, les index d'expressions, les index couvrants ainsi
que les index implicites.
11/22
Prise en main de l'algorithme B-Tree
Un index à colonne unique(à une seule colonne) est un index créé sur la base d'une
seule colonne de table. La syntaxe de base est :
CREATE INDEX index_name ON table_name(column_name);
Un index multicolonne est défini sur plusieurs colonnes d'une table. La syntaxe de
base est la suivante :
CREATE INDEX index_name ON table_name(column1_name,
column2_name, …);
Astuce :
Prenez en considération la ou les colonnes que vous pouvez utiliser très
fréquemment dans la clause WHERE d'une requête comme conditions de filtre.
Pratique :
Créer un index multicolonne sur les colonnes 'numero_carte' et
'numero_liste' de la table 'votes'. Vérifier que l'index a été créé.
12/22
Prise en main de l'algorithme B-Tree
Les index uniques sont utilisés non seulement pour les performances, mais
également pour l'intégrité des données. Un index unique ne permet pas d'insérer des
valeurs en double dans la table. La syntaxe de base est la suivante :
CREATE UNIQUE INDEX index_name ON table_name(column_name);
Un index partiel est un index construit sur un sous-ensemble d'une table, le sous-
ensemble est défini par une expression conditionnelle. L'index contient uniquement
des entrées pour les lignes de la table qui satisfont le prédicat. La syntaxe de base
est la suivante :
CREATE INDEX index_name ON table_name(column_name) conditional_expression;
Pratique :
Ouf ! Créer un index qui rend unique les entrées de la tables 'filieres' sur la colonne
'titre'.
Créer un index partiel pour améliorer la requête suivante :
SELECT * FROM delegues WHERE numero_liste >= 2 AND genre = 'value';
13/22
Prise en main de l'algorithme B-Tree
Les index implicites sont des index créés automatiquement par le serveur de base de
données lors de la création d'un objet. Des index sont créés automatiquement pour
les contraintes de clé primaire et les contraintes d'unicité.
Les index d'expressions sont des fonctions ou expressions scalaires calculées à
partir d'une ou plusieurs colonnes de la table. Ils sont utiles pour un accès rapide au
table en utilisant les résultats de calcul. La syntaxe de base est la suivante :
CREATE INDEX index_name ON table_name(fonction_or_expression);
Pratique :
Afficher la structure de la table 'filieres'. Nous n'avons pas défini un index
sur la colonne 'id_filiere' mais pourtant on en a une. Pourquoi ?
Créer un index pour améliorer la requête suivante :
SELECT * FROM etudiants WHERE lower(nom) = 'valeur';
14/22
Prise en main de l'algorithme B-Tree
Un index couvrant sont est un index conçu pour inclure les colonnes nécessaires pour
un type de requête particulier. Dans ce cas alors, l'index contient non seulement les
valeurs de la colonne indexée mais aussi de celle incluse. La syntaxe est la suivante :
CREATE INDEX index_name ON table_name(column_name) INCLUDE (other_column);
ALLER PLUS LOIN
La commande EXPLAIN -->comment PostgreSQL prévoit d’exécuter la requête.
EXPLAIN query;
La commande ANALYSE --> exécuter la requête et afficher des informations
supplémentaires sur son exécution
EXPLAIN ANALYSE query ;
Pratique :
Créer un index couvrant sur les colonnes 'numero_liste' et 'date' de la table
'votes'(la colonne 'numero_liste' déjà indexée).
Pouvez-vous utiliser les commandes EXPLAIN et ANALYSE sur une requête ?
A quoi sert la commande '\di ;'.
S2 : Vue d'ensemble de la dernière partie

Classes et familles d'opérateurs 16/22


Lors de la création d'un index, on peut indiquer une classe d'opérateurs pour chaque
colonne de l'index.
On entend par classe d'opérateurs, les opérateurs que l'index doit utiliser sur cette colonne.
On entend par famille d'opérateurs, un regroupement de plusieurs classes d'opérateurs
similaires.
But : Ils sont utiles pour certains types de données, pour lesquels il peut y avoir plus d'un
comportement utile de l'index(ex: stockage des nombres complexes).
Lien pour en savoir plus sur la liste des classes et familles d'opérateurs disponibles :
https://postgresql.developpez.com/documentation/francais/10beta4/indexes-opclass.html
La syntaxe de base pour créer une classe d'opérateurs est la suivante :
CREATE INDEX index_name ON table_name(column_name classe_operateur
[options de tri][, …]);
Pratique :
Pouvez-vous indexer la colonne 'titre' de la table 'filieres' avec la classe
d'opérateur varchar_pattern_ops ?
Index et collationnements 17/22
Un collationnement est un ensemble de règles qui déterminent comment les
caractères sont comparés et triés.
Il est utilisé pour définir l’ordre des caractères dans une chaîne de caractères.
Un index peut supporter seulement un collationnement par colonne d’index.
Si plusieurs collationnements ont un intérêt, plusieurs index pourraient être
nécessaires.
Voici la syntaxe de base pour créer un index avec collationnement en PostgreSQL:
CREATE INDEX index_name ON table_name(column_name COLLATE
"nom_collationnement");
Voici la syntaxe de base d'une requête utilisant le collationnement en PostgreSQL:
SELECT index_name FROM table_name ORDER BY column_name
COLLATE \"fr-BE-x-icu\";

Pour avoir la liste des collationnements disponibles , exécuter :


SELECT collname FROM pg_collation;
Index et collationnements 17/22

Pratique :
Un exemple concret: trier les noms de famille des étudiants dans l’ordre
alphabétique.
Exécuter la requête : SELECT nom FROM etudiants;
Créer un index sur la colonne “nom” de la table 'etudiants' et spécifier le
collationnement "fr-BE-x-icu"(encode français belge) pour cette colonne.
Vérifier que l'index a bel et bien été créé.
Exécuter une requête de sélection qui permet de trier le nom des étudiants
par ordre alphabétique.
Que pouvez-vous conclure ?
S3 : Examiner l'utilisation des index

Quand faut-il éviter les index ?


Bien que les index soient destinés à améliorer les performances d'une base de
données, il y a des moments où ils doivent être évités. Les lignes directrices suivantes
indiquent quand l'utilisation d'un index doit être considérée :

Les index ne doivent pas être utilisés sur de petites tables


19/22
Tables qui ont des opérations fréquentes et importantes de mise à jour ou
d'insertion par lots.
Les index ne doivent pas être utilisés sur les colonnes contenant un nombre élevé
de valeurs NULL.
Les colonnes fréquemment manipulées ne doivent pas être indexées.

Pratique :
Exécuter la commande '\di ' vu précédemment.
Pouvez-vous donner alors apporter des critiques à l'utilisation des index dans
notre base de données ?
03
Conclusion
21/22

Que pouvons nous retenir de cette présentation ?

Les index sont des structures de données permettant d'accéder


efficacement aux données. Cependant, nous devons les utiliser avec
parcimonie et efficience.
« Merci pour votre aimable attention. »

- Fin

Vous aimerez peut-être aussi