PostgreSQL CREATE INDEX
Les index dans PostgreSQL sont des objets de base de données qui améliorent la vitesse des opérations de recherche de données. Ils servent de pointeurs pour localiser rapidement les tableaux, ce qui améliore les performances des requêtes.
Utilisation
Les index sont utilisés pour optimiser les performances des requêtes SELECT et des clauses WHERE. Ils sont particulièrement utiles pour les tableaux de grande taille nécessitant un accès rapide aux données.
CREATE INDEX index_name
ON table_name (column1, column2, ...);
Dans cette syntaxe, `CREATE INDEX` définit un nouvel index nommé `index_name` sur le `table_name` et la/les colonne(s) spécifiée(s).
Exemples
1. Création d'un index de base
CREATE INDEX idx_customer_name
ON customers (customer_name);
Cet exemple crée un index sur la colonne `customer_name` du tableau `customers`, ce qui accélère les recherches impliquant cette colonne.
2. Indice composite
CREATE INDEX idx_order_customer
ON orders (customer_id, order_date);
Cet index composite sur le tableau `orders` utilise les tableaux `customer_id` et `order_date`, améliorant ainsi les performances des requêtes filtrant sur ces colonnes. Les index composites sont utiles lorsque les requêtes impliquent fréquemment plusieurs colonnes dans leurs clauses WHERE.
3. Index unique
CREATE UNIQUE INDEX idx_unique_email
ON users (email);
Un index unique garantit que toutes les valeurs de la colonne indexée `email` sont distinctes dans le tableau `users`, ce qui évite les entrées en double et optimise les recherches uniques.
4. Index partiel
CREATE INDEX idx_active_users
ON users (last_login_date)
WHERE active = true;
Un index partiel est créé sur la colonne `last_login_date` pour les seules lignes où `active` est vrai, optimisant ainsi les requêtes qui ciblent ce sous-ensemble de données.
5. Index du texte intégral
CREATE INDEX idx_document_content
ON documents USING gin(to_tsvector('english', content));
Cet exemple crée un index plein texte sur la colonne `content` du tableau `documents`, améliorant ainsi les performances des requêtes de recherche plein texte.
Impact de l'indexation
Les index peuvent améliorer de manière significative les performances des requêtes de lecture, mais ils peuvent également avoir un impact sur les performances des opérations d'écriture telles que `INSERT`, `UPDATE`, et `DELETE`. Le compromis consiste à trouver un équilibre entre la rapidité de la recherche de données et la lenteur potentielle de la modification des données.
Conseils et bonnes pratiques
- Indexer de manière sélective. N'indexez que les colonnes fréquemment utilisées dans les conditions de la requête afin d'éviter toute surcharge inutile.
- Contrôler et entretenir. Analyser et maintenir régulièrement les index pour s'assurer qu'ils sont utilisés de manière efficace.
- Attention à la surindexation. Un indexage excessif peut ralentir les modifications de données telles que `INSERT`, `UPDATE`, et `DELETE`.
- Utilisez des index partiels. Envisagez des index partiels pour les colonnes comportant un grand nombre de NULL ou pour un sous-ensemble spécifique de données.
- Tirez parti des indices uniques. Utilisez des index uniques pour garantir l'intégrité des données et améliorer les performances des requêtes.
- Fonctionnalités avancées. Explorez les options d'indexation telles que les index d'expression pour les valeurs calculées ou les index de couverture pour inclure des colonnes supplémentaires dans l'index.
- Utilisez REINDEX. Utilisez périodiquement la commande `REINDEX` pour reconstruire des index corrompus ou pour améliorer les performances après des changements significatifs de données.