Как заставить Pg использовать индекс?

Поиск
Список
Период
Сортировка
От Dmitry E. Oboukhov
Тема Как заставить Pg использовать индекс?
Дата
Msg-id 20150108223010.GO31138@vdsl.uvw.ru
обсуждение исходный текст
Список 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

Вложения

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

Предыдущее
От: Andrey Lizenko
Дата:
Сообщение: Re: [pgsql-ru-general] Как можно полностью очистить базу данных?
Следующее
От: Andrey Lizenko
Дата:
Сообщение: Re: [pgsql-ru-general] Как заставить Pg использовать индекс?