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