Re: 1- and 2-dimensional indexes on same column: why is the 2d one preferred?

Поиск
Список
Период
Сортировка
От Tom Lane
Тема Re: 1- and 2-dimensional indexes on same column: why is the 2d one preferred?
Дата
Msg-id 4846.1237850819@sss.pgh.pa.us
обсуждение исходный текст
Ответ на 1- and 2-dimensional indexes on same column: why is the 2d one preferred?  (Marinos Yannikos <mjy@geizhals.at>)
Ответы Re: 1- and 2-dimensional indexes on same column: why is the 2d one preferred?  (Marinos Yannikos <mjy@geizhals.at>)
Список pgsql-general
Marinos Yannikos <mjy@geizhals.at> writes:
> Recent versions of PostgreSQL seem to prefer 2d indexes somehow:
> for a table "foo" with
> "i_a" btree (a)
> "i_ab" btree (a, b)

> SELECT * FROM foo WHERE a=123
> will often use "i_ab" and not "i_a" (even right after ANALYZE).

I suspect that these indexes are exactly the same size --- look at
pg_class.relpages or use the pg_relation_size() function to verify.
If they are, the computed access cost will be exactly the same and
which one gets picked is an implementation artifact.  (I think that
in the current code the one that has the larger OID gets picked,
but that's not something I'd suggest you rely on.)  It wouldn't
really matter anyway because the actual runtime should be pretty
much the same too.

The most likely reason for this to happen is that you're talking
about two int4 columns and you're on a 64-bit machine that is
going to align index entries to 8-byte boundaries.  The one-column
index isn't actually any smaller because of alignment padding :-(

            regards, tom lane

В списке pgsql-general по дате отправления:

Предыдущее
От: Whit Armstrong
Дата:
Сообщение: Re: libpq -- reading a timestamp with time zone using binary format
Следующее
От: Tom Lane
Дата:
Сообщение: Re: Determining/Setting a server's time zone