Maison > base de données > tutoriel mysql > Pourquoi mon PostgreSQL `SELECT DISTINCT` est-il si lent et comment puis-je y remédier ?

Pourquoi mon PostgreSQL `SELECT DISTINCT` est-il si lent et comment puis-je y remédier ?

Linda Hamilton
Libérer: 2025-01-07 18:39:40
original
954 Les gens l'ont consulté

Why is My PostgreSQL `SELECT DISTINCT` So Slow, and How Can I Fix It?

PostgreSQL SELECT DISTINCT Goulot d'étranglement des performances : une étude de cas

Cet article examine les problèmes de performances rencontrés avec une SELECT DISTINCT requête sur une table PostgreSQL contenant environ deux millions d'enregistrements.

Contexte

La table tickers stocke les données du canal « ticker » de Coinbase Pro. Une clé primaire composite comprend la colonne product_id.

Problème de performances

La requête SELECT DISTINCT product_id FROM tickers devait fonctionner correctement en raison de l'index sur product_id. Cependant, l'exécution prenait systématiquement 500 à 600 millisecondes.

Enquête sur le plan de requête

EXPLAIN ANALYZE a montré que le planificateur de requêtes utilisait par défaut une analyse séquentielle, ignorant l'index product_id. Forcer l'utilisation de l'index n'a pas résolu le problème de performances.

Tentatives d'optimisation d'index

La création d'un index dédié sur product_id n'a apporté que des améliorations mineures, les analyses séquentielles étant toujours préférées par le planificateur, à moins qu'elles ne soient explicitement remplacées.

Solution efficace : émulation d'analyse par saut d'index

La solution implémentée émule les analyses de saut d'index à l'aide de requêtes récursives avec jointures latérales. Cette approche a considérablement amélioré les performances, réduisant le temps d'exécution à 0,75 milliseconde, même avec un ensemble de données de 2,25 millions de lignes.

Résumé

Le manque actuel de fonctionnalités natives d'analyse des sauts d'index de PostgreSQL est résolu par cette technique d'émulation. Cette méthode utilise efficacement les index existants et évite la pénalité de performances liée aux analyses séquentielles pour les SELECT DISTINCT requêtes sur les grandes tables.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal