я создал представления для своего проекта теперь, я хочу оптимизировать их для цели скорости..., как я могу определить, что представление может быть, оптимизируют? индекс, полезный для этого....
let's say the following example...
SELECT dbo.vw_WebInventory.skref AS SaleID, dbo.vw_WebInventory.lot_number AS LotNumber, dbo.vw_WebInventory.Description,
dbo.vw_WebInventory.Image AS HasImage, dbo.vw_WebInventory.Sold, dbo.vw_WebInventory.Withdrawn, dbo.vw_WebTopBids.TopBid,
ISNULL(dbo.vw_WebInventory.Mins_Extend_y, 0) AS BidTimeExtend, dbo.Sale.SaleTypeID, dbo.Sale.ClosingDate, dbo.vw_WebInventory.ExDate,
dbo.vw_WebInventory.CurrDate, CASE WHEN vw_WebInventory.ExDate > ISNULL(vw_WebInventory.LotClosingDate, Sale.ClosingDate)
THEN 1 ELSE 0 END AS ShowBidMessage
FROM dbo.vw_WebInventory INNER JOIN
dbo.Sale ON dbo.vw_WebInventory.skref = dbo.Sale.SaleID LEFT OUTER JOIN
dbo.vw_WebTopBids ON dbo.vw_WebInventory.skref = dbo.vw_WebTopBids.CatNumber AND dbo.vw_WebInventory.lot_number = dbo.vw_WebTopBids.LotNumber
где vm_webTopBids и vm_WebInventory являются двумя другими представлениями... это возможный оптимизировать это представление?
Вложение представлений, которые вызывают другие представления, является крайне плохим методом для производительности. Поскольку он не может быть проиндексирован, он должен вызвать все базовое представление, чтобы получить одну запись, которую вернет вершина.Плюс, в конце концов, у вас будет достаточно слоев, и вы достигнете предела того, сколько таблиц вы можете вызвать в представлении (и если view1 вызывает view2 и view3, и оба вызывают одни и те же базовые таблицы, к которым вы присоединяетесь дважды, а не один раз, что часто плохо для производительность. Прекратите вызывать представления из представлений, или вы очень скоро получите непригодную для использования систему.
Мы полностью переделываем такую систему, потому что разработчики приложений сделали это, и многомиллионный клиент покинет нас, если производительность улучшается, и мы не можем улучшить его с помощью этой структуры, поэтому теперь мы сталкиваемся с полной переработкой, за которую клиент не будет платить, потому что ошибка была нашей. НЕ идите по этому пути. Остановитесь сейчас. Представления, вызывающие представления, очень , очень плохо.
Представление - это макрос, который расширяется во внешний запрос. Если это не индексированное представление и у вас нет корпоративной версии, оно просто игнорируется.
Итак, если вы объединяете 3 представления, и каждое представление использует 5 таблиц, у вас получается большое соединение с 15 таблицами.
Лучше всего использовать Помощник по настройке базы данных или отсутствующий индексный скрипт:
SELECT
CONVERT(decimal(28, 1), migs.avg_total_user_cost * migs.avg_user_impact *
(migs.user_seeks + migs.user_scans)) AS improvement_measure,
'CREATE INDEX missing_index_' + CONVERT(varchar, mig.index_group_handle) +
'_' + CONVERT(varchar, mid.index_handle) + ' ON ' + mid.statement + ' (' +
ISNULL(mid.equality_columns, '') +
CASE WHEN mid.equality_columns IS NOT NULL AND
mid.inequality_columns IS NOT NULL THEN ','
ELSE ''
END + ISNULL(mid.inequality_columns, '') + ')' + ISNULL(' INCLUDE (' +
mid.included_columns +
')', '') AS create_index_statement,
migs.*,
mid.database_id,
mid.[object_id],
mig.index_group_handle,
mid.index_handle
FROM
sys.dm_db_missing_index_groups mig INNER JOIN
sys.dm_db_missing_index_group_stats migs ON migs.group_handle = mig.index_group_handle INNER JOIN
sys.dm_db_missing_index_details mid ON mig.index_handle = mid.index_handle
WHERE
CONVERT(decimal(28, 1), migs.avg_total_user_cost * migs.avg_user_impact *
(migs.user_seeks + migs.user_scans)) > 10 AND
database_id = DB_ID()
ORDER BY
migs.avg_total_user_cost * migs.avg_user_impact * (migs.user_seeks +
migs.user_scans) DESC
Редактировать, после примера
Вы вкладываете представления поверх представлений. Само представление невозможно оптимизировать.
Как упоминалось, это не может быть проиндексировано
В этом случае представление не может быть проиндексировано, поскольку оно содержит ВНЕШНЕЕ СОЕДИНЕНИЕ.
См. Эту статью для получения информации об индексировании представлений и (многих) ограничениях на них: http://technet.microsoft.com/en-us/library/cc917715.aspx