Re: How indexes are updated - Mailing list pgsql-general

From Steve Crawford
Subject Re: How indexes are updated
Date
Msg-id 200306191036.44711.scrawford@pinpointresearch.com
Whole thread Raw
In response to How indexes are updated  ("Bob Powell" <Bob@hotchkiss.org>)
List pgsql-general
> I think I have proven to myself that when a new record is added to
> a table it is added to the end of the table.  Also, when a record
> in a table is updated it is also moved to the bottom of the table.

Not necessarily. Other things like vacuums, other users in-progress
transactions/rollbacks, etc. will influence things as well.

For instance, say you are the only user of your database and you start
with a new table, insert 1000 records, delete the first 900 you
entered then vacuum the table (freeing the unused space for reuse but
not returning it to the filesystem).

Now if you insert a new record and "select * from yourtable" the new
record will probably be at the top (depending on record size, block
sizes, etc.).

Now while I would suspect this indicates that the record is physically
at the beginning of the database's on-disk file, the fact that it
appears first in the output is no proof of this because whenever a
behavior is not specified by the SQL specs or explicitly by the user
query it is left to the "whim" of the database. Without an "order by"
there is no guarantee what the output order will be nor whether the
behavior will remain constant from version to version.

There is not necessarily a 1:1 correlation between tables and indexes
and files on the disk. The DB designers can merge, split, scatter,
buffer, etc. the data onto disk(s) in whatever way gets the job done.
It's up to the user to explicitly request the order of attributes and
tuples where that is necessary.

> Can someone tell me when the indexes on the columns in the table
> are updated.  Is the insertion of an index record inserted before
> the new record is added to the bottom of the table?  Or is the new
> record added to the table  first and then the databse figures out
> the insertion in the index?  Thanks in advance.

I can't. But just like the above, it's up to the internal design of
the DB (and with the solution of the index-growth problem promised
for 7.4 the internal behavior of indexes will most likely change).

Cheers,
Steve


pgsql-general by date:

Previous
From: Jonathan Bartlett
Date:
Subject: Re: How to process mail using pgSQL?
Next
From: Steve Crawford
Date:
Subject: Re: Single Instance of Backend