Обсуждение: Row versions and indexes

Поиск
Список
Период
Сортировка

Row versions and indexes

От
"Jack Orenstein"
Дата:
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

Re: Row versions and indexes

От
Alan Hodgson
Дата:
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


Re: Row versions and indexes

От
Tom Lane
Дата:
"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