Я использую SQL Server 2008R2.SQL Server 2008R2 Пользовательская функция (таблица) Производительность
У меня есть следующие настройки:
-- Query #1
SELECT * FROM
Product P
INNER JOIN ProductComments C ON C.ProductId = P.ProductId
-- Query #2
SELECT * FROM
GetAllProducts() P
CROSS APPLY GetCommentsOfProduct(P.ProductId) C
где GetAllProducts()
является
CREATE FUNCTION GetAllProducts
(
)
RETURNS TABLE
AS
RETURN
(
SELECT * FROM Product
)
GetCommentsOfProduct(P.ProductId)
и является
CREATE FUNCTION [dbo].[GetCommentsOfProduct]
(
@ProductId int
)
RETURNS TABLE
AS
RETURN
(
SELECT * FROM ProductComments WHERE ProductId = @ProductId
)
Оба запроса # 1 и # 2 запроса результат в точно такой же фактический план выполнения и вернуть тот же результат. Стоимость их запросов составляет 50% относительно партии. Означает ли это, что оптимизатор запросов SQL переводит эти запросы в один и тот же запрос? И почему нет накладных расходов для вызова UDF? И означает ли это, что я могу структурировать все мои таблицы в UDF и не будет иметь проблем с производительностью даже при выполнении операций JOIN? Знаете ли вы о каких-либо недостатках?
Расчетный или фактический план выполнения? Вы должны использовать 'VIEW' для этой цели, а не ... – Yuck
«Знаете ли вы какие-то недостатки» - неважно, какие у вас сильные стороны? – AakashM
@Yuck: фактический план выполнения – Chris