2017-10-12 1 views
1

Ich habe eine Tabelle mit etwa 100.000 Zeilen, mit einem bestimmten Nullwert Datumsfeld, das ich in mehrere Spalten transformieren muss. Diese Spalten sind über eine Ansicht zugänglich.Der schnellste Weg, Datumsfeld in mehrere Felder in Postgres zu transformieren

zur Vereinfachung sagen wir, ich bin bei zwei Tabellen tab1 und tab2 genannt, wird der Inhalt der beiden Tabellen ist nicht von Bedeutung, außer das Datumsfeld von tab1

bisher die Lösung kam ich Folgendes ist :

create view result_view as 
    select to_char(t1.date, 'YYYY') AS year, 
      to_char(t1.date, 'MM') AS month, 
      to_char(t1.date, 'YYYY-MM-DD') AS day, 
      t2.value as value 
    from tab t1 left join tab2 t2 on t1.id = t2.id; 

die aktuelle lösung nimmt so viel zeit, jede optimierung?

+0

Zeit genommen, ist nicht auf 'to_char' hier verbracht –

Antwort

2

Ich habe einen sehr großen Tisch über 100.000 Zeilen enthält

Das ist nicht sehr groß ist;)

Führen Sie die Abfrage unter explain (analyze, buffers), um zu sehen, wo die Zeit verloren.

Ansonsten würde ich empfehlen, extract anstelle von to_char zu verwenden.

z. extract(YEAR from t1.date) und dergleichen.

Extract ist SQL-Standard und gibt Zahlen, keine Zeichenfolgen zurück. Dies wird oft gewünscht.

Mehr über Extrakt: http://modern-sql.com/feature/extract

+0

die Beschreibung geändert wird, um die Frage objektiven –

+0

zu beschreiben @rachidelkedmiri Sie die Worte entfernt * sehr groß * von der Frage. Aber du bist meinen Vorschlägen nicht gefolgt. –

+0

yup. extract, date_part oder https://www.postgresql.org/docs/8.1/static/functions-datetime.html#FUNCTIONS-DATETIME-EXTRACT – murison

Verwandte Themen