Мне нужно часто запускать запрос, который агрегирует данные из разных таблиц, что-то вроде
select
Name, Code, Date From TableA
union
select
Surname, TheCode, TheDate From TableB
union
[...] -- this stands for some more select statements
union
select
NickName, MyCode, getdate() from tableC
(пример упрощенный, но он такой: я не могу реорганизовать базу данных, чтобы поместить вседанные, которые мне нужны в одной таблице!).
Этот запрос может вернуть 100 000 записей, даже если обычно это будет 400-500 из-за условий WHERE.
Я рассматриваю возможность использования представленияупростить запросы, но имеет ли это смысл?Запрашивает ли представление быстрее, потому что представление предварительно вычислено (я не уверен в этом), или представление выполняется так, как оно запрашивается?Я имею в виду: если 10 пользователей запрашивают одни и те же данные, выполняя 10 запросов к таблицам с объединениями или выполняя 10 запросов к представлению, это одно и то же или лучше иметь представление?(Я имею в виду, что если представление выполняется только один раз, лучше, если нет, то оно точно такое же).
Более того, я не могу использовать индексированное представление, поскольку я использую UNION
STATEMENTS.
Преимущество представления состоит в том, что я также могу легко сделать выбор count(*)
против представления, в то время как для этого с таблицами я должен написать почти 2 разных запроса: один (тот, который я написал выше) для получения записей,и еще один (изменяя тот, что выше) для подсчета.