【发布时间】:2018-03-27 10:19:16
【问题描述】:
我有一个名为LocalItems 的函数,带有@LanguageID 参数:
CREATE FUNCTION [dbo].[LocalItems]
(
@LanguageID INT
)
RETURNS TABLE
AS
RETURN
(
SELECT Items.*, Products.Name, Products.BrandID
FROM Items
INNER JOIN LocalProducts(@LanguageID) AS Products
ON Items.ProductID = Products.ID
)
当我对函数的结果应用过滤器时:
SELECT *
FROM LocalItems(0)
WHERE BrandID IN(50,51) AND ID < 3500
生成的查询需要 12 分钟 (!!!) 才能返回大约 3500 条记录。当我直接运行查询时:
SELECT Items.*, Products.Name, Products.BrandID
FROM Items
INNER JOIN LocalProducts(3) AS Products
ON Items.ProductID = Products.ID
WHERE BrandID IN(50,51) AND ID < 3500
执行查询大约需要 5 秒。
我该如何解决这个问题?
【问题讨论】:
-
IIF和ROWNUMBER怎么样?
标签: sql optimization sql-function