Row versions and indexes

Started by Jack Orensteinover 19 years ago3 messagesgeneral
Jump to latest
#1Jack Orenstein
jack.orenstein@gmail.com

Suppose I have a table and index:

create table t(x int, y varchar, primary key(x));

and that the only updates are "update t set y = ... where x = ?".

I understand that updating a row of t generates a new row version, and
that different transactions may see different versions of the same
row.

How does versioning work for the index?

- The update above does not update the index key. Does the index get
updated at all?

- If not, then how can an index lookup return the correct version of
selected rows?

This aspect of versioning has never been clear to me. Now there's a cost
issue involved, as I need to update every row in a large table, never
updating the index key. Will this run faster if I drop the index?
(Yes, I can run the experiment, but I'd like to understand the
fundamentals better.)

Jack Orenstein

#2Alan Hodgson
ahodgson@simkin.ca
In reply to: Jack Orenstein (#1)
Re: Row versions and indexes

On Thursday 28 September 2006 14:58, "Jack Orenstein"
<jack.orenstein@gmail.com> wrote:

How does versioning work for the index?

- The update above does not update the index key. Does the index get
updated at all?

Yes, it does.

- If not, then how can an index lookup return the correct version of
selected rows?

This aspect of versioning has never been clear to me. Now there's a cost
issue involved, as I need to update every row in a large table, never
updating the index key. Will this run faster if I drop the index?
(Yes, I can run the experiment, but I'd like to understand the
fundamentals better.)

Yes, it certainly will.

--
"A government that robs Peter to pay Paul can always depend upon the support
of Paul." - George Bernard Shaw

#3Tom Lane
tgl@sss.pgh.pa.us
In reply to: Jack Orenstein (#1)
Re: Row versions and indexes

"Jack Orenstein" <jack.orenstein@gmail.com> writes:

I understand that updating a row of t generates a new row version, and
that different transactions may see different versions of the same
row.
How does versioning work for the index?

Each row version has its own index entry pointing to it. So an update
is not a lot different from an insert --- they both generate a full set
of index entries.

regards, tom lane