Améliorer la performance des requêtes dans PostgreSQL
Amy McCarty
Instructor
| Système | Étapes frontales | Processus dorsaux | |
|---|---|---|---|
| 1 | Analyseur | Envoie la requête à la base | Vérifie la syntaxe. Traduit le SQL en une syntaxe plus proche de la machine selon des règles internes. |
| 2 | Planificateur et Optimiseur | Évalue et optimise les tâches | S'appuie sur des statistiques pour créer le plan. Calcule les coûts et choisit le meilleur plan. |
| 3 | Exécuteur | Retourne les résultats | Suit le plan pour exécuter la requête. |
S'adapte aux changements de structure SQL
SELECT * FROM pg_class
WHERE relname = 'mytable'
-- échantillon de colonnes de sortie
| relname | relhasindex |
SELECT * FROM pg_stats
WHERE tablename = 'mytable'
-- échantillon de colonnes de sortie
null_frac | avg_width | n_distinct |
EXPLAIN
SELECT * FROM cheeses
Seq Scan on cheeses
(cost=0.00..10.50 rows=5725 width=296)
Seq Scan on cheeses (cost=0.00..10.50 rows=5725 width=296)
Seq Scan on cheeses (cost=0.00..10.50 rows=5725 width=296)
..10.50 : temps total
temps total = démarrage + exécution
Seq Scan on cheeses (cost=0.00..10.50 rows=5725 width=296)
EXPLAIN
SELECT * FROM cheeses WHERE species IN ('goat','sheep')
Seq Scan on cheeses (cost=0.00..378.90 rows=3 width=118)
-> Filter: (species = ANY ('{"goat","sheep"}'::text[]))
EXPLAIN
SELECT * FROM cheeses WHERE species IN ('goat','sheep') -- index on species column
Bitmap Index Scan using species_idx on cheeses (cost=0.29..12.66 rows=3 width=118)
Index Cond: (species = ANY ('{"goat","sheep"}'::text[]))
Améliorer la performance des requêtes dans PostgreSQL