Обсуждение: performance for insert / update
Hello, I have a pretty big database with about 200 000 rows. This is the main table. Also some other tables with FKs to this main table. I have to calculate some numbers for each entry at a certain amount of time and update the DB. I've noticed the update TAKES a very long time. For example i have a second table which has 3 columns: 1) the FK to the main big table 2) number 1 3) number 2 After the calculation is done i execute many update table2 set number1=%d, number2=%d. It takes quite a lot of time. Any clue of how can i improve this time ? I did some tests with other engines. Eg: Mysql (no FKs) - aprox 10 times faster SQLite - aprox 5 time faster I tryed to set fsync = false but no luck either. It still takes quite a lot of time. I can share the complete test results if somebody is interested. Thanks for your help ! p.s.: postgresql-7.4.7 is the version i have ! -- Catalin Constantin Bounce Software http://www.bounce-software.com http://www.cabanova.ro
On Mon, Jun 27, 2005 at 18:46:58 +0300, Catalin Constantin <catalin@bounce-software.com> wrote: > Hello, > > I have a pretty big database with about 200 000 rows. > This is the main table. Also some other tables with FKs to this main > table. > > I have to calculate some numbers for each entry at a certain amount of > time and update the DB. > > I've noticed the update TAKES a very long time. Do you have indexes on the foreign key fields in the referencing tables? These are created by default and if you are updating the referenced tupples a sequential search will be needed if there isn't an index. Also of note is that there is recent a change to only do this if the referenced fields in the record are changed, but I think this is new for 8.1. That will make things go a lot faster if you aren't updating the referenced fields in your main table.
this is my "schema" for the table with the "issue" !
# \d url_importance
Table "public.url_importance"
Column | Type | Modifiers
-----------+------------------+-------------------------------------
url_id | bigint | default nextval('url_id_seq'::text)
links_in | integer | default 0
links_out | integer | default 0
rank | double precision | default 0
Indexes:
"ak_url_id_key_url_impo" unique, btree (url_id)
Foreign-key constraints:
"fk_url_impo_reference_url" FOREIGN KEY (url_id) REFERENCES url(url_id) ON UPDATE CASCADE ON DELETE CASCADE
based on this table i calculate the "rank" for each page and the
reupdate the table.
on update it takes QUITE a lot time to make the update.
basically i am updating just a number which sould not be that resource
consuming !
is upgrading to 8.X a "solution" in this case ?
p.s.: i am not updating anything except the rank column !
Tuesday, June 28, 2005, 4:01:02 PM, Bruno Wolff III wrote:
> Do you have indexes on the foreign key fields in the referencing tables?
> These are created by default and if you are updating the referenced tupples
> a sequential search will be needed if there isn't an index.
> Also of note is that there is recent a change to only do this if the referenced
> fields in the record are changed, but I think this is new for 8.1. That
> will make things go a lot faster if you aren't updating the referenced
> fields in your main table.
--
Catalin Constantin
Bounce Software
http://www.bounce-software.com
http://www.cabanova.ro