[GENERAL] slow update but have an index

2001-08-17 Thread Feite Brekeveld

Hi,

I have a table with no relations to other tables. It has a sequence
number field (integer) and a status field being a char.

There is a unique index on the seqno field.

Now this table has about 80,000 records. I need to update 74,000 status
fields. So I made a dump, and hacked the dump into SQL statements like:

update accounting set status = 'C' where seqno = 1566385;

and the other 74,000



This is awfully slow. How come ? The index on the seqno should give
speedy access to the record.

Thanks,

--
Feite Brekeveld
[EMAIL PROTECTED]
http://www.osiris-it.nl




---(end of broadcast)---
TIP 5: Have you checked our extensive FAQ?

http://www.postgresql.org/users-lounge/docs/faq.html



Re: [GENERAL] slow update but have an index

2001-08-17 Thread Martijn van Oosterhout

On Fri, Aug 17, 2001 at 01:08:29PM +0200, Feite Brekeveld wrote:
 Now this table has about 80,000 records. I need to update 74,000 status
 fields. So I made a dump, and hacked the dump into SQL statements like:
 
 update accounting set status = 'C' where seqno = 1566385;
 
 and the other 74,000
 
 This is awfully slow. How come ? The index on the seqno should give
 speedy access to the record.

Well, an index speeds it up, but that times 80,000 will still take a while.
Is there any trickery or will this work?

update accounting set status = 'C';

If so, that will be much faster.

One sequential scan is faster than 80,000 index scans.

-- 
Martijn van Oosterhout [EMAIL PROTECTED]
http://svana.org/kleptog/
 It would be nice if someone came up with a certification system that
 actually separated those who can barely regurgitate what they crammed over
 the last few weeks from those who command secret ninja networking powers.

---(end of broadcast)---
TIP 5: Have you checked our extensive FAQ?

http://www.postgresql.org/users-lounge/docs/faq.html



Re: [GENERAL] slow update but have an index

2001-08-17 Thread Feite Brekeveld

Martijn van Oosterhout wrote:

 On Fri, Aug 17, 2001 at 01:08:29PM +0200, Feite Brekeveld wrote:
  Now this table has about 80,000 records. I need to update 74,000 status
  fields. So I made a dump, and hacked the dump into SQL statements like:
 
  update accounting set status = 'C' where seqno = 1566385;
  
  and the other 74,000
 
  This is awfully slow. How come ? The index on the seqno should give
  speedy access to the record.

 Well, an index speeds it up, but that times 80,000 will still take a while.
 Is there any trickery or will this work?

 update accounting set status = 'C';

 If so, that will be much faster.

No that will not work, because they other 6000 need not to be changed. Of
course I could update the this way and change the other 6000 back to their
original status, but the query I issued is so slow that I think something is
wrong.





 One sequential scan is faster than 80,000 index scans.

 --
 Martijn van Oosterhout [EMAIL PROTECTED]
 http://svana.org/kleptog/
  It would be nice if someone came up with a certification system that
  actually separated those who can barely regurgitate what they crammed over
  the last few weeks from those who command secret ninja networking powers.

 ---(end of broadcast)---
 TIP 5: Have you checked our extensive FAQ?

 http://www.postgresql.org/users-lounge/docs/faq.html

--
Feite Brekeveld
[EMAIL PROTECTED]
http://www.osiris-it.nl




---(end of broadcast)---
TIP 1: subscribe and unsubscribe commands go to [EMAIL PROTECTED]



Re: [GENERAL] slow update but have an index

2001-08-17 Thread Martijn van Oosterhout

On Fri, Aug 17, 2001 at 01:40:32PM +0200, Feite Brekeveld wrote:
  Well, an index speeds it up, but that times 80,000 will still take a while.
  Is there any trickery or will this work?
 
  update accounting set status = 'C';
 
  If so, that will be much faster.
 
 No that will not work, because they other 6000 need not to be changed. Of
 course I could update the this way and change the other 6000 back to their
 original status, but the query I issued is so slow that I think something is
 wrong.

Well, there's a bit of an issue here. Each time you do an insert, the table
gets larger, the index gets larger, etc. Disk accesses everywhere. If you
can do it one query then the sequential is much friendlier to disk caches
and the performance will be much more consistant.

Can you codify in an SQL query how you decide which records to change. I've
found the best way to improve performance is to minimise the number of
queries, letting the database do the maximum optimisation possible.

-- 
Martijn van Oosterhout [EMAIL PROTECTED]
http://svana.org/kleptog/
 It would be nice if someone came up with a certification system that
 actually separated those who can barely regurgitate what they crammed over
 the last few weeks from those who command secret ninja networking powers.

---(end of broadcast)---
TIP 1: subscribe and unsubscribe commands go to [EMAIL PROTECTED]



Re: [GENERAL] slow update but have an index

2001-08-17 Thread Feite Brekeveld

Martijn van Oosterhout wrote:

 On Fri, Aug 17, 2001 at 01:40:32PM +0200, Feite Brekeveld wrote:
   Well, an index speeds it up, but that times 80,000 will still take a while.
   Is there any trickery or will this work?
  
   update accounting set status = 'C';
  
   If so, that will be much faster.
 
  No that will not work, because they other 6000 need not to be changed. Of
  course I could update the this way and change the other 6000 back to their
  original status, but the query I issued is so slow that I think something is
  wrong.

 Well, there's a bit of an issue here. Each time you do an insert, the table
 gets larger, the index gets larger, etc. Disk accesses everywhere. If you
 can do it one query then the sequential is much friendlier to disk caches
 and the performance will be much more consistant.

 Can you codify in an SQL query how you decide which records to change. I've
 found the best way to improve performance is to minimise the number of
 queries, letting the database do the maximum optimisation possible.


hacked it with perl into several

update ... where seqno between x and y statements.

That went smoothly.




 --
 Martijn van Oosterhout [EMAIL PROTECTED]
 http://svana.org/kleptog/
  It would be nice if someone came up with a certification system that
  actually separated those who can barely regurgitate what they crammed over
  the last few weeks from those who command secret ninja networking powers.

 ---(end of broadcast)---
 TIP 1: subscribe and unsubscribe commands go to [EMAIL PROTECTED]

--
Feite Brekeveld
[EMAIL PROTECTED]
http://www.osiris-it.nl




---(end of broadcast)---
TIP 2: you can get off all lists at once with the unregister command
(send unregister YourEmailAddressHere to [EMAIL PROTECTED])