Как заставить Pg использовать индекс? - Mailing list pgsql-ru-general

From Dmitry E. Oboukhov
Subject Как заставить Pg использовать индекс?
Date
Msg-id 20150108223010.GO31138@vdsl.uvw.ru
Whole thread Raw
List pgsql-ru-general
имеется большая таблица с заказами.

далее

в этой таблице очень немного заказов имеют статус 'confirm' и при этом
поле owner у них если NULL то таких еще меньше.

Запросы такие

    SELECT
        *
    FROM
        orders
    WHERE
            status = 'confirm'
        AND owner IS NULL
        AND gid = число     -- номер группы
        AND ... -- дополнительные фильтры


Строю индекс

    CREATE INDEX test_idx ON orders ("gid")
        WHERE status = 'confirm' AND AND owner IS NULL;

индекс занимает 150Кб - получается если база его будет использовать
будет рулез полнейший (таблица - несколько гигабайт)

проверяем

    EXPLAIN ANALYZE
    SELECT
        *
    FROM
        orders
    WHERE
            status = 'confirm'
        AND owner IS NULL
        AND gid = 123
    ;

Показывает что наш индекс используется, отлично!

Добавляем еще AND

    EXPLAIN ANALYZE
    SELECT
        *
    FROM
        orders
    WHERE
            status = 'confirm'
        AND owner IS NULL
        AND gid = 123

        -- вот это добавили
        AND name = 'Vasya'
    ;

и все, абзац, пошло делать Heap Scan. Индекс не стало использовать.

вопрос:

я не хочу выделять в секцию WITH, потому что используются курсоры
ну и просто не хочу.

как заставить Pg использовать этот индекс?
вроде же очевидно что условие AND дополнительное только сокращает
выборку
то есть по идее этот индекс должен использоваться, а он его
использовать не хочет.

ЧЯДНТ?

--

. ''`.                               Dmitry E. Oboukhov
: :’  :   email: unera@debian.org jabber://UNera@uvw.ru
`. `~’              GPGKey: 1024D / F8E26537 2006-11-21
  `- 1B23 D4F8 8EC0 D902 0555  E438 AB8C 00CF F8E2 6537

Attachment

pgsql-ru-general by date:

Previous
From: Andrey Lizenko
Date:
Subject: Re: [pgsql-ru-general] Как можно полностью очистить базу данных?
Next
From: Andrey Lizenko
Date:
Subject: Re: [pgsql-ru-general] Как заставить Pg использовать индекс?