2017-05-11 3 views
0

J'utilise PostgreSQL 9.5. J'ai une table qui est presque 20GB. Il a une clé primaire sur la colonne ID qui est une colonne auto-incrémentée, mais j'exécute mes requêtes sur une autre colonne qui est un horodatage ... J'essaie de sélectionner/mettre à jour/supprimer sur la base d'une colonne timestamp mais les requêtes sont très lentes. Par exemple: Une sélection sur cette table `où timestamp_column :: date (date_en_cours - INTERVAL '10 DAY ') :: date) prend plus de 15 minutes environ. Pouvez-vous s'il vous plaît aider sur quel type d'index devrais-je ajouter à cette table (si nécessaire) pour le faire fonctionner plus vite?Grande table PostgreSQL - Sélectionnez, mettez à jour très lentement

Merci

+2

Suivez les [link info] (http://stackoverflow.com/tags/postgresql-performance/info) dans la balise postgresql performance. Modifiez votre question et collez cette information. –

+0

Avez-vous créé un index pour la colonne d'horodatage? –

+1

Vous devez afficher la définition, l'interrogation et l'explication de la table. Pour l'instant, je vous conseille d'éviter la conversion de type ou toute autre transformation de données sur la clause where (sauf si vous avez un index avec une expression correcte): 'timestamp_column :: date'. –

Répondre

0

Vous pouvez créer un index avec votre expression de la clause:

CREATE INDEX ns_event_last_updated_idx ON ns_event (CAST(last_updated AT TIME ZONE 'UTC' AS DATE)); 

Mais, gardez à l'esprit que vous utilisez timestamp with timezone, jeter ce type à ce jour peut vous permettre d'obtenir des effets secondaires indésirables .

En outre, enlever tous les casting dans votre sql:

select * from ns_event where Last_Updated < (current_date - INTERVAL '25 DAY'); 
+0

Merci pour l'aide –

+0

Vous êtes les bienvenus . N'oubliez pas de marquer ma réponse comme acceptée. Merci. –