2011-11-25 3 views
3

J'ai des problèmes avec une requête qui devient terriblement lente au fur et à mesure que la base de données se développe.Postgresql: ordre par deux colonnes boolean et une colonne timestamp

Le problème semble être le tri, qui dépend de trois conditions: importance, urgence et horodatage.

La requête est actuellement en cours d'utilisation simple ancienne ORDER BY DESC urgente, importante DESC, date_published

DESC

Les champs sont booléennes pour urgent et important, et date_published est un entier (timestamp UNIX).

+0

Filtrez-vous en plus de l'ORDER BY? Je soupçonne que vous pouvez améliorer les performances ** beaucoup ** de plus. Afficher la requête complète et nous pourrions en trouver plus. –

+0

Oui, il y a plusieurs tables et conditions impliquées et la requête moins la commande passe sous 20 ms. Avec la commande, il est passé à près de 4000 ms. Avec les suggestions pour un index composé, j'ai créé un index de 4 colonnes, et maintenant la requête prend entre 20 et 30 ms. Merci à tous pour l'aide. – Rumen

Répondre

1
CREATE INDEX foo ON table_name (urgent DESC, important DESC, date_published DESC); 
+0

Oui, les choses les plus agréables de la vie sont les plus simples. L'indice composé m'a échappé avec succès. Merci à Bos et à l'utilisateur inconnu. – Rumen

4

Créez des index pour les colonnes que vous triez régulièrement. Vous pouvez même définir un index composé.

+0

Désolé, j'ai oublié de mentionner. Les trois colonnes ont des index. – Rumen

Questions connexes