Index partiels PostgreSQL
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 sur un tableau. Les index partiels sont un type d'index qui n'inclut les lignes dans l'index que si elles remplissent une certaine condition, ce qui permet d'optimiser les performances et de réduire l'espace de stockage.
Utilisation
Les index partiels sont utilisés lorsque vous souhaitez indexer un sous-ensemble de tableaux, généralement ceux qui répondent à des critères spécifiques, afin d'améliorer les performances des requêtes tout en minimisant l'utilisation de l'espace disque. Ils sont définis en ajoutant une clause WHERE
à la définition de l'index.
CREATE INDEX index_name
ON table_name (column_name)
WHERE condition;
Dans cette syntaxe, le site WHERE condition
spécifie les lignes à inclure dans l'index.
Exemples
1. Index partiel de base
CREATE INDEX active_users_index
ON users (last_login)
WHERE active = true;
Cet exemple crée un index partiel sur le tableau users
pour la colonne last_login
, mais uniquement pour les tableaux dont le champ active
est true
.
2. Indexation avec des conditions de valeur spécifiques
CREATE INDEX high_priority_orders_index
ON orders (order_date)
WHERE priority = 'high';
Ici, un index partiel est créé sur le tableau orders
pour la colonne order_date
, en se concentrant uniquement sur les commandes dont l'adresse priority
est 'high'
.
3. Condition complexe Index partiel
CREATE INDEX recent_high_sales_index
ON sales (sale_amount)
WHERE sale_amount > 1000 AND sale_date > CURRENT_DATE - INTERVAL '1 year';
Cet exemple crée un index partiel sur le tableau sales
pour la colonne sale_amount
concernant les ventes supérieures à 1 000 $ au cours de l'année écoulée, optimisant ainsi les requêtes pour les transactions récentes de grande valeur.
4. Index partiel avec expressions
CREATE INDEX discounted_products_index
ON products ((price - discount))
WHERE discount > 0;
Cet exemple illustre l'utilisation d'une expression dans l'index, créant ainsi un index partiel sur le site price - discount
calculé pour les produits bénéficiant d'une remise.
Conseils et bonnes pratiques
- Ciblez les requêtes fréquentes. Utilisez des index partiels pour les requêtes qui accèdent fréquemment à un sous-ensemble spécifique de données afin de maximiser les performances.
- Surveillez l'utilisation de l'index. Analysez régulièrement l'utilisation des index pour vous assurer qu'ils sont toujours utiles, car les modèles de données et les exigences des requêtes peuvent changer au fil du temps.
- Réduire la taille de l'index. Soyez précis dans la clause
WHERE
pour que la taille de l'index reste petite et efficace, en évitant d'indexer des lignes inutiles. - Impact sur la performance des tests. Après avoir créé un index partiel, testez les performances de la requête pour vous assurer qu'il apporte les améliorations de vitesse souhaitées.
- Considérez les opérations d'écriture. Sachez que les index partiels peuvent avoir un impact sur les performances en écriture en raison de la surcharge liée au maintien des index pendant les insertions, les mises à jour et les suppressions.
- Utilisez
REINDEX
. Utilisez régulièrement la commandeREINDEX
pour reconstruire les index partiels et maintenir leur efficacité, en particulier après des modifications importantes des données. - Effet de levier
EXPLAIN
. Utilisez la commandeEXPLAIN
pour savoir comment les requêtes utilisent les index partiels et adapter votre stratégie d'indexation en conséquence.
Considérations relatives aux performances et à la version
- Les index partiels sont particulièrement utiles pour les tableaux contenant d'importants volumes de données dont seul un petit sous-ensemble est fréquemment interrogé.
- La maintenance des index nécessite des ressources, c'est pourquoi il convient d'évaluer le compromis entre les performances de lecture et d'écriture.
- Assurez-vous de la compatibilité avec votre version de PostgreSQL, car les améliorations apportées aux stratégies d'indexation peuvent varier d'une version à l'autre.