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"
выполняются довольно быстрее, чем без этой лишней фильтрации.
Буду рад комментариям.
Спасибо.
--
---
С уважением,
Михаил Наседкин
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 |