Colonnes utilisées pour le filtrage ou rejoindre (ou, dans une moindre mesure, tri ) présentent un intérêt pour l'indexation. Les colonnes qui viennent d'être sélectionnées sont à peine pertinentes ! Pour la requête suivante, seuls les index sur a et e peut être utile :
SELECT a,b,c,d
FROM tbl_a
WHERE a = $some_value
AND e < $other_value;
Tiens, putain et peut-être c sont également candidats :
SELECT a,b,c,d
FROM tbl_a
JOIN tbl_b USING (f)
WHERE a = $some_value
AND e < $other_value
ORDER BY c;
Après avoir créé des index, testez pour voir s'ils sont réellement utiles avec EXPLAIN ANALYZE
. Comparez également les temps d'exécution avec et sans les index. La suppression et la recréation d'index sont rapides et faciles. Il existe également des paramètres pour expérimenter
avec EXPLAIN ANALYZE
. La différence peut être stupéfiante ou inexistante.
Comme vos tables sont en lecture seule, la maintenance des index est bon marché. C'est simplement une question d'espace disque.
Si vous voulez vraiment savoir ce que vous faites, commencez par lire la documentation .
Si vous ne savez pas à quelles requêtes vous attendre...
-
Essayez d'enregistrer suffisamment de requêtes pour trouver des cas d'utilisation typiques. Requêtes de journal avec le paramètre
log_statement = all
pour ça. Ou enregistrez simplement les requêtes lentes en utilisantlog_min_duration_statement
. -
Créer index cela pourrait être utile et vérifier les statistiques après un certain temps pour voir ce qui est réellement utilisé. PostgreSQL a mis en place toute une infrastructure pour statistiques de surveillance . Un moyen pratique d'étudier les statistiques (et de nombreuses autres tâches) est pgAdmin où vous pouvez choisir votre table / fonction / index et obtenir toutes les données sur l'onglet "statistiques" dans le navigateur d'objets (fenêtre principale).
-
Procédez comme décrit ci-dessus pour voir si les index utilisés accélèrent réellement les choses.
-
Si le planificateur de requêtes doit choisir d'utiliser un ou plusieurs de vos index mais sans effet ou avec un effet négatif, il y a probablement un problème avec votre configuration et vous devez étudier les bases de l'optimisation des performances :vide, analyse, paramètres de coût, utilisation de la mémoire, ...