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:// | ||