Re: Index Ignored Due To Use Of View

Поиск
Список
Период
Сортировка
От Merlin Moncure
Тема Re: Index Ignored Due To Use Of View
Дата
Msg-id AANLkTi=4Zizm=6EO7NighZO36e2Ahy9bHMPjrYH-1PL4@mail.gmail.com
обсуждение исходный текст
Ответ на Re: Index Ignored Due To Use Of View  ("Donald Fraser" <postgres@kiwi-fraser.net>)
Список pgsql-bugs
On Wed, Mar 23, 2011 at 8:10 AM, Donald Fraser <postgres@kiwi-fraser.net> w=
rote:
> ----- Original Message -----
>
> Sent: Wednesday, March 23, 2011 12:50 PM
> Subject: Index Ignored Due To Use Of View
> PostgreSQL 8.3.14
> OS: Linux Redhat 5.4
>
> Note: I have used the same subject for this email taken from an email:
> Posted 2011-02-24 13:29:22-08 by "David Johnston", because this seems=A0t=
o be
> a very similar observation.
>
> Bug/Problem Summary:
> We are using a simple query based on a simple view and the query optimizer
> is not choosing an index.
> The same query without the view is using an index.
> The same query on an almost identical view, but having either removed a
> single column which was generated via a function call or replace the
> function call=A0with equivalent SQL, then=A0the query optimizer=A0is=A0ch=
oosing an
> index.
>
>
> I found the solution to the problem and it would therefore appear as thou=
gh
> this=A0is not a bug!
> If I change the function definition to be "STABLE" instead of "VOLATILE",
> then the problem goes away.

Also, it's bad practice to do order by/limit in the new definition
like that.  Leave them off, and do it in the calling query.  I would
write your function like this:

CREATE OR REPLACE FUNCTION get_cmpyname(integer)  RETURNS citext AS
$$
  SELECT CASE
    WHEN length(s_umbname) > 0 THEN s_umbname || '-' || s_res
    ELSE ''
  END FROM tbl_cmpy WHERE id =3D $1;
$$ LANGUAGE sql STABLE STRICT;

I took off the limit 1 because you probably don't need it.

merlin

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

Предыдущее
От: "Donald Fraser"
Дата:
Сообщение: Re: Index Ignored Due To Use Of View
Следующее
От: Susanne Ebrecht
Дата:
Сообщение: Re: TO_CHAR(timestamptz,datetimeformat) wrong after DST change