Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
cnam:nfp107:seance10 [2023/04/22 20:36] – [Plan physique] jcheron | cnam:nfp107:seance10 [2023/04/22 21:06] (Version actuelle) – [Index] jcheron | ||
---|---|---|---|
Ligne 125: | Ligne 125: | ||
Les index doivent être utilisés sur les attributs : | Les index doivent être utilisés sur les attributs : | ||
- | souvent mobilisés dans une restriction (donc une jointure) | + | * souvent mobilisés dans une restriction (donc une jointure) |
- | très discriminés (c'est à dire pour lesquels peu d' | + | |
- | rarement modifiés | + | |
+ | <WRAP important> | ||
Inconvénients : | Inconvénients : | ||
- | diminuent les performances en mise à jour (puisqu' | + | * diminuent les performances en mise à jour (puisqu' |
- | ajoutent du volume à la base de données et leur volume peut devenir non négligeable. | + | |
- | Ne permettent pas toujours de gagner en efficacité (voir plus bas). | + | |
- | Source : use-the-index-luke.com | + | </ |
- | Bitmap | + | //TODO image// |
- | Intérêt | + | |
+ | Source : [[https:// | ||
+ | |||
+ | === Bitmap | ||
+ | |||
+ | <WRAP tip> | ||
+ | __Intérêt | ||
R = Nombre de valeurs possibles/ | R = Nombre de valeurs possibles/ | ||
+ | </ | ||
Les index Bitmap sont destinés à l' | Les index Bitmap sont destinés à l' | ||
Ligne 146: | Ligne 154: | ||
De tels index optimisent la recherche relative à une question du type : “l' | De tels index optimisent la recherche relative à une question du type : “l' | ||
- | Inconvénients | + | <WRAP important> |
+ | __Inconvénients | ||
diminuent de manière importante les performances en mise à jour (puisqu' | diminuent de manière importante les performances en mise à jour (puisqu' | ||
- | utilisables uniquement pour peu de valeurs distinctes = le meilleur ratio de valeurs distinctes au nombre total occurrences est d' | + | utilisables uniquement pour peu de valeurs distinctes = le meilleur ratio de valeurs distinctes au nombre total occurrences est d' |
- | FullText | + | </ |
- | Les index FullText permettent de faire des recherches sur les champs de type string (CHAR, VARCHAR et TEXT). | + | |
- | Création : | + | === FullText === |
+ | |||
+ | Les index FullText permettent de faire des recherches sur les champs de type string (CHAR, VARCHAR et TEXT). | ||
+ | == Création : == | ||
+ | <sxh sql> | ||
CREATE FULLTEXT INDEX ind_full_titre | CREATE FULLTEXT INDEX ind_full_titre | ||
ON Livre (titre); | ON Livre (titre); | ||
- | Utilisation : | + | </ |
+ | == Utilisation : == | ||
+ | |||
+ | <sxh sql> | ||
SELECT * | SELECT * | ||
FROM Livre | FROM Livre | ||
WHERE MATCH(titre) | WHERE MATCH(titre) | ||
AGAINST (' | AGAINST (' | ||
- | Modes possibles : | + | </ |
- | IN NATURAL LANGUAGE MODE | + | == Modes possibles : == |
- | IN BOOLEAN MODE | + | * IN NATURAL LANGUAGE MODE |
- | WITH QUERY EXPANSION | + | |
- | Index partiels | + | |
- | Permettent de poser un index de manière conditionnelle ⇒ limite la taille de l' | + | |
+ | ==== Index partiels ==== | ||
+ | |||
+ | Permettent de poser un index de manière conditionnelle ⇒ limite la taille de l' | ||
+ | <sxh sql> | ||
CREATE INDEX nr_mail | CREATE INDEX nr_mail | ||
ON mails (subject) | ON mails (subject) | ||
WHERE status = ' | WHERE status = ' | ||
- | Efficacité des index | + | |
+ | </ | ||
+ | |||
+ | ==== Efficacité des index ==== | ||
L' | L' | ||
Une recherche nécessite les 3 opérations suivantes | Une recherche nécessite les 3 opérations suivantes | ||
- | le parcours de l' | + | * le parcours de l' |
- | la suite de la chaîne de nœuds feuilles | + | |
- | la récupération des données de la table | + | |
L' | L' | ||
- | Points importants : | + | === Points importants : === |
+ | |||
+ | |||
+ | * Nombre de valeurs (unique ou multiple/ | ||
+ | * Index composites et importance de l' | ||
+ | * Index lents ⇒ un TABLE ACCESS FULL (lecture de plusieurs enreg par bloc) peut être plus rapide qu'un **INDEX RANGE SCAN** (lecture 1 à 1 de plusieurs enregs) (voir [[https:// | ||
+ | * Index et usage de fonctions ⇒ index avec fonctions possibles pour fonctions pures (voir [[https:// | ||
+ | * [[https:// | ||
+ | |||
+ | ==== Analyse de requêtes ==== | ||
- | Nombre de valeurs (unique ou multiple/ | ||
- | Index composites et importance de l' | ||
- | Index lents ⇒ un TABLE ACCESS FULL (lecture de plusieurs enreg par bloc) peut être plus rapide qu'un INDEX RANGE SCAN (lecture 1 à 1 de plusieurs enregs) (voir Index lents) | ||
- | Index et usage de fonctions ⇒ index avec fonctions possibles pour fonctions pures (voir Usage de fonctions) | ||
- | Index et requêtes préparées | ||
- | Analyse de requêtes | ||
La plupart des SGDB possédent un analyseur de requêtes permettant de visualiser le plan d' | La plupart des SGDB possédent un analyseur de requêtes permettant de visualiser le plan d' | ||
- | PostgreSQL | + | __PostgreSQL |
- | explain ⇒ Donne le plan d' | + | //TODO image// |
- | explain analyze ⇒ Donne le plan d' | + | |
- | Ressources | + | * explain ⇒ Donne le plan d' |
- | Explain beautifier | + | |
- | Explain documentation | + | |
- | Application | + | === Ressources |
+ | |||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | |||
+ | ==== Application | ||
+ | <WRAP todo> | ||
Benchmark avec et sans Index BTree + Analyse des plans de requête (PostGreSQL) sur : | Benchmark avec et sans Index BTree + Analyse des plans de requête (PostGreSQL) sur : | ||
- | Select monotable sur champ | + | * Select monotable sur champ |
- | Join sur champ | + | |
- | Select avec fonction (LCASE(name) par exemple) | + | |
- | Utilisation de fonction de regroupement | + | |
- | Order By | + | |
- | Références | + | </ |
- | Cours de Philippe RIGAUX (CNAM) | + | ==== Références |
- | Use the index Luke | + | |
- | MySQL performance optimization | + | * [[http:// |
- | PostgreSQL performance tuning | + | * [[https:// |
+ | * [[https:// | ||
+ | * [[https:// |