В запросе избыточное условие

Поиск
Список
Период
Сортировка
От Mihail Nasedkin
Тема В запросе избыточное условие
Дата
Msg-id CALSKcLT09pD9MyuzBBOHDp_XNMO6QdAigQg+vb_BfS41oJ=c_g@mail.gmail.com
обсуждение исходный текст
Список pgsql-ru-general
Доброго, всем!

Встретился с такой ситуацией и хочу ее как-то осмыслить.

Есть простая таблица с тремя целочисленными колонками "ид", "ид", "ид2".
Есть три индкса в этой таблице: primary key("ид"), unique("ид1",
"ид2"), index("ид2")
Хотя, наверное, в ситуации задействуется только один индекс, но на
всякий случай сообщил как есть.
Да и дело может не в индексах.

А дальше делаю простой запрос:
select *
from "Таблица"
where "ид1"=123456;


Теперь следующий момент. Так было задумано, что во ВСЕХ записях,
удовлетворяющих этому запросу поле "ид"="ид2".
Мне стало интересно добавить эту проверку в запрос:
select *
from "Таблица"
where "ид1"=123456 and "ид"="ид2";

Повторяю, эта проверка избыточна.

Вот, explain показывает, что добавился filter("ид"="ид2"), остальной
план как прежде с использованием только индекса unique("ид1", "ид2").
По логике, дополнительная проверка должна замедлять запрос, однако на
практике выходит, что <некоторые> запросы с определенным "ид1"
выполняются довольно быстрее, чем без этой лишней фильтрации.

Буду рад комментариям.
Спасибо.

--
---
С уважением,
Михаил Наседкин

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

Предыдущее
От: Alexander LAW
Дата:
Сообщение: Re: Перевод postgres
Следующее
От: Alexander LAW
Дата:
Сообщение: Закончен перевод PostgreSQL 9.1