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

From: Mihail Nasedkin <m(dot)nasedkin(at)gmail(dot)com>
To: pgsql-ru-general <pgsql-ru-general(at)postgresql(dot)org>
Subject: В запросе избыточное условие
Date: 2012-02-20 07:44:01
Message-ID: CALSKcLT09pD9MyuzBBOHDp_XNMO6QdAigQg+vb_BfS41oJ=c_g@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: 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"
выполняются довольно быстрее, чем без этой лишней фильтрации.

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

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

Browse pgsql-ru-general by date

  From Date Subject
Next Message Alexander LAW 2012-02-20 15:11:13 Закончен перевод PostgreSQL 9.1
Previous Message Alexander LAW 2012-02-13 06:13:04 Re: Перевод postgres