On Fri, 21 Sep 2001, Jeff Barrett wrote: > I have a select statement that returns a set of 74,000+ results back in > under a minute as follows: > > select s.sessid, s.membid, s.datetime > from sessions2 s, (select min(datetime) as datetime, membid > from sessions2 > where membid is not null > group by membid) as minsess > where s.membid = minsess.membid > and s.datetime = minsess.datetime; > > The final cost from explain for the above select is 22199.15 ... 24318.40 > with rows = 5 and width = 28. > > Then I issue an update as follows (to update those 74,000+ rows): > update sessions2 set sinceinception = 0 > from sessions2 s, (select min(datetime) as datetime, membid from sessions2 > group by membid) as mindate > where s.membid = mindate.membid > and s.datetime = mindate.datetime; > > The final cost from explain for the above update is 31112.11...98869.91 with > rows = 2013209 and width=87. > > This update statement has been left running over night and does not > complete. The ram usage on the machine is at about 3/4 capacity (800mb) > during this time and CPU usage is near 100%. The machine has the -F option > set and memory segments of 200mb and is running 7.1.2. > > What could be causing this update statement to not complete? > Why are the costs so different since it seems to me that besides the cost of > the update they are the same query?
I thought that the updated table is always in your from list (implicitly), so you'd want: update sessions2 set sinceinception = 0 from (select min(datetime) as datetime, membid from sessions2 group by membid) as mindate where sessions2.membid=mindate.membid and sessions2.datetime=mindate.datetime; I think your query would be joining the s/mindate results against sessions2. ---------------------------(end of broadcast)--------------------------- TIP 3: if posting/reading through Usenet, please send an appropriate subscribe-nomail command to [EMAIL PROTECTED] so that your message can get through to the mailing list cleanly