PostgreSQL SELECT DISTINCT
Problèmes de performances avec les clés composites
Utiliser SELECT DISTINCT
sur une table PostgreSQL avec une clé primaire composite (par exemple, (product_id, trade_id)
) peut être étonnamment lente. Le planificateur de requêtes choisit souvent une analyse séquentielle au lieu d'utiliser efficacement l'index.
Pourquoi est-ce lent ?
La solution : simuler l'analyse des sauts d'index avec un CTE
Bien qu'une véritable analyse de saut d'index ne soit pas disponible, nous pouvons efficacement imiter son comportement à l'aide d'une expression de table commune (CTE) récursive :
<code class="language-sql">WITH RECURSIVE cte AS ( ( -- parentheses are crucial SELECT product_id FROM tickers ORDER BY 1 LIMIT 1 ) UNION ALL SELECT l.* FROM cte c CROSS JOIN LATERAL ( SELECT product_id FROM tickers t WHERE t.product_id > c.product_id ORDER BY 1 LIMIT 1 ) l ) SELECT * FROM cte;</code>
Ce CTE parcourt des valeurs product_id
uniques dans un ordre trié, en tirant parti de l'index sur (product_id)
pour plus d'efficacité.
Avantages de cette approche
(product_id, trade_id)
et l'index sur (product_id)
.Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!