pg.ddx.io  pgsql-performance@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: Péter Kovács <peter.kovacs@chemaxon.hu>
To: PostgreSQL Performance List <pgsql-performance@postgresql.org>
Subject: Re: Index on two columns not used
Date: Tue, 24 Oct 2006 01:07:35 +0200
Message-ID: <453D4B37.1000006@chemaxon.hu> (raw)
In-Reply-To: <453CC2DD.4070608@logix-tt.com>
References: <45360E25.9010403@freesurf.fr>
	<45361295.9050504@enterprisedb.com>
	<4539F4E1.7000003@chemaxon.hu>
	<453CC2DD.4070608@logix-tt.com>

Markus,

Thank you for your kind explanation.

Peter

Markus Schaber wrote:
> Hi, Peter,
>
> Péter Kovács wrote:
>   
>> Sorry for the amateurish question, but what are "heap tuples"?
>>
>> Also, my understanding is that the following statement applies only for
>> composite indexes: "PostgreSQL can't use the values stored in the index
>> to check the join condition". I assume that PostgreSQL will be able to
>> use single-column-indexes for join conditions. Is this correct?
>>     
>
> Both questions are tightly related:
>
> First, the "heap" is the part of the table where the actual tuples are
> stored.
>
> PostgreSQL uses an MVCC system, that means that multiple versions (with
> their transaction information) of a single row can coexist in the heap.
> This allows for higher concurrency in the backend.
>
> Now, the index basically stores pointers like "pages 23 and 42 contain
> rows with value 'foo'", but version information is not replicated to the
> index pages, this keeps the index' size requirements low.
>
> Additionally, in most UPDATE cases, the new row version will fit into
> the same page as the old version. In this case, the index does not have
> to be changed, which is an additional speed improvement.
>
> But when accessing the data via the index, it can only give a
> preselection of pages that contain interesting data, and PostgreSQL has
> to look into the actual heap pages to check whether there really are row
> versions that are visible in the current transaction.
>
>
> A further problem is that some GIST index types are lossy, that means
> the index does not retain the full information, but only an
> approximation, for efficiency reasons.
>
> A prominent example are the PostGIS geometry indices, they only store
> the bounding box (4 float values) instead of the whole geometry (may be
> millions of double precision coordinates). So it may be necessary to
> re-check the condition with the real data, using the lossy index for
> preselection.
>
> HTH,
> Markus
>   



view thread (16+ messages)  latest in thread

Message-ID: <453D4B37.1000006@chemaxon.hu>
Permalink:  ../453D4B37.1000006@chemaxon.hu/
Also on:    postgresql.org/message-id/453D4B37.1000006@chemaxon.hu

 · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-performance@postgresql.org
  Cc: peter.kovacs@chemaxon.hu
  Subject: Re: Index on two columns not used
  In-Reply-To: <453D4B37.1000006@chemaxon.hu>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox