Re: partial indexes not used on parameterized queries?

Поиск
Список
Период
Сортировка
От Simon Riggs
Тема Re: partial indexes not used on parameterized queries?
Дата
Msg-id 1152530366.2518.20.camel@localhost.localdomain
обсуждение исходный текст
Ответ на partial indexes not used on parameterized queries?  (Dirk Lutzebäck <lutzeb@aeccom.com>)
Ответы Re: partial indexes not used on parameterized queries?  (Dirk Lutzebäck <lutzeb@aeccom.com>)
Список pgsql-bugs
On Mon, 2006-07-10 at 12:22 +0200, Dirk Lutzeb=C3=A4ck wrote:

> we are using postgresql 8.1.4 and found that partial indexes are not
> being used when the query is run using parameters, eg. in a function.
> When running the same query with arguments passed in the query string
> partial indexes are being used.

> Any clues? Has this behaviour changed for a while?

No, it's always worked like this.

The index can only be used if we know at plan time that the index
predicate is true for all times that the query is executed. We cannot
know this for the exact query and index combination you have requested.
If we acted differently, your query would return the wrong answer in
some circumstances.

I can't find anything in the manual that explains this distinction.

Here's an example that explains this more easily:

If your index looked like this

CREATE INDEX c_6000_index ON consumption (voi)=20
WHERE=20
    code > 5000
AND val1 IS NULL;

and your query like this

UPDATE c=20
SET val1=3D1784=20
WHERE=20
(   code > 6000
AND val1 IS NULL )
AND code =3D ?=20
AND voi =3D '1923328-8-0-0';

...then the index could be used, because the index predicate is implied
by part of the query clause for all values of the parameter.

So its best to look for some other static definition of the index.

I'll submit a doc patch.

--=20
  Simon Riggs
  EnterpriseDB          http://www.enterprisedb.com

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

Предыдущее
От: Dirk Lutzebäck
Дата:
Сообщение: partial indexes not used on parameterized queries?
Следующее
От: Dirk Lutzebäck
Дата:
Сообщение: Re: partial indexes not used on parameterized queries?