我正在使用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 查询优化器将这些查询转换为相同的查询?为什么调用UDFs没有开销?这是否意味着我可以将所有表格组织成UDFs,在进行JOIN操作时也不会有性能问题?你知道有什么缺点吗?