Кто-нибудь знает, когда SQL Server 2008 R2 может автоматически сопоставлять индексированные представления (также известные как материализованные представления), которые содержат присоединения к запросу?
Например, вид
select dbo.Orders.Date, dbo.OrderDetails.ProductID
from dbo.OrderDetails
join dbo.Orders on dbo.OrderDetails.OrderID = dbo.Orders.ID
Невозможно автоматически сопоставить один и тот же точный запрос. Когда я выбираю прямо из этого представления with (noexpand)
, я фактически получаю гораздо более быстрый план запросов, который выполняет сканирование кластерного индекса индексированного представления. Могу ли я получить SQL Server для автоматического сопоставления? У меня довольно много запросов и представлений, и я не хочу каждый раз ссылаться на индексированное представление вручную, потому что я использую OR mapper.
Я использую корпоративную версию SQL Server 2008 R2.
Редактировать: я нашел решение. SQL Server 2008 R2 не сопоставляет индексированные представления с более чем 2 объединениями автоматически. Возможно, это слишком сильно замедлит процесс оптимизации.
Редактировать 2: Рассматривая эти 2 года после того, как вопрос был создан мной, я не думаю, что мой вывод был правильным. Сопоставление материализованных представлений - очень хрупкий процесс без каких-либо четких правил, которые я мог бы найти за эти годы.
Конечно, роль играют следующие:
- Количество соединений
- Наличие предиката
- Порядок соединения, как в представлении, так и в запросе