Identifying obsolete values

From: Haller Christoph <ch(at)rodos(dot)fzk(dot)de>
To: pgsql-sql(at)postgresql(dot)org
Subject: Identifying obsolete values
Date: 2001-10-17 17:17:44
Message-ID: 200110171517.RAA13051@rodos
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-sql

First of all, thanks to Philip Hallstrom for the quick reply.

Consider the following tables
CREATE TABLE advncd_onfvalue
(timepoint DATETIME NOT NULL,
mid INTEGER NOT NULL,/* measurement id */
lid INTEGER NOT NULL,/* location id */
sid INTEGER NOT NULL,/* source id */
entrancetime DATETIME NOT NULL DEFAULT NOW(),
value FLOAT NOT NULL /* float value, not unique */
) ;
CREATE TABLE advncd_tempreftime
(timepoint DATETIME NOT NULL,
mid INTEGER NOT NULL,/* measurement id */
lid INTEGER NOT NULL,/* location id */
sid INTEGER NOT NULL,/* source id */
entrancetime DATETIME NOT NULL
) ;
I use the second table to identify the actual resp. obsolete ones within the first table.

DELETE FROM advncd_tempreftime;
INSERT INTO advncd_tempreftime
SELECT timepoint,mid,lid,sid,MAX(entrancetime) FROM advncd_onfvalue
GROUP BY timepoint,mid,lid,sid ;

SELECT o.sid,o.timepoint,o.lid,o.mid,o.value FROM advncd_onfvalue o
WHERE EXISTS
(SELECT * FROM advncd_tempreftime t WHERE
o.timepoint = t.timepoint AND
o.mid = t.mid AND
o.lid = t.lid AND
o.sid = t.sid AND
o.entrancetime = t.entrancetime
) ;
SELECT o.sid,o.timepoint,o.lid,o.mid,o.value FROM advncd_onfvalue o
WHERE NOT EXISTS
(SELECT * FROM advncd_tempreftime t WHERE
o.timepoint = t.timepoint AND
o.mid = t.mid AND
o.lid = t.lid AND
o.sid = t.sid AND
o.entrancetime = t.entrancetime
) ;
It works fine, but it's a pain how long it takes.
I tried to improve the speed by
CREATE /* NOT UNIQUE */ INDEX advncd_onfvalue_idx_tmlse ON advncd_onfvalue
(timepoint, mid, lid, sid, entrancetime) ;
CREATE /* NOT UNIQUE */ INDEX advncd_tempreftime_idx_tmlse ON advncd_tempreftime
(timepoint, mid, lid, sid, entrancetime) ;
vacuum advncd_onfvalue \g
vacuum advncd_tempreftime \g
Some effect, but still too slow.
Does anybody know alternatives?
What about
SELECT DISTINCT ON (sid,timepoint,lid,mid)
sid,timepoint,lid,mid,value FROM advncd_onfvalue
ORDER BY sid,timepoint,lid,mid,entrancetime DESC ;
My bad luck is, I cannot test DISTINCT ON (multiple columns) at the moment,
because my system admin did not yet install the up-to-date postgres version.

Regards, Christoph

Responses

Browse pgsql-sql by date

  From Date Subject
Next Message Nicolas KOWALSKI 2001-10-17 17:24:42 update in rule
Previous Message Josh Berkus 2001-10-17 15:44:44 Re: Variables.