В запросе избыточное условие
От | 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 по дате отправления: