Добрый день!
Есть у меня в Postgresql такие запросы с такой скосротью выполнения:
select * from vw_users where id = 10 and year = 2010 - выполняется очень быстро, доли секунды
select * from messages where from_user_id = 10 and year = 2010 - тоже оч быстро
select * from messages LEFT JOIN users a ON messages.from_user_id = a.id WHERE year = 2010 - тоже оч быстро
Но вот если я делаю LEFT JOIN с VIEW vw_users,то запрос выполняется 15 секунд на совершенно не больших таблицах в несколько тысяч записей.
select * from messages LEFT JOIN vw_users a ON messages.from_user_id = a.id - 15 секунд.
Такое ощущение, что он в начале формирует вьюху для ВСЕХ записей (а там много JOIN'ом, что занимает время), а потом выбирает только те, которые удовлетяоряют части записей, которые отбираются условием year = 2010.
Как этого избежать?
Как указать порядок выполнения VIEW'хи или как-то иначе?
Спасибо
> Такое ощущение, что он в
> Такое ощущение, что он в начале формирует вьюху для ВСЕХ записей
Ощущение верное. В документации чёрным по белому написано, что VIEW не хранится на диске и формируется в момент запроса.
> Как этого избежать?
Не используйте VIEW в JOIN. Это логично кстати, потому что назначение VIEW предоставить КОНЕЧНУЮ выборку для удобства пользователя. Нужно что-то другое? Либо делайте отдельный VIEW, либо не пользуйтесь VIEW во время JOIN