我正在使用SQL Server 2008R2,我一直在研究正在运行的查询的一些性能问题。它目前看起来与此类似......
SELECT *
FROM table
WHERE table.id = XX
AND table.categoryId = dbo.function_get_category_id('category config key');
显然比这更复杂(层次结构,多语言等),但这是基本的查询。似乎在WHERE子句中有一个函数是SQL Server的一个已知问题,但我对如何更好地编写此查询感到茫然。我试过这个(希望欺骗它)但没有注意到任何显着的改进。
AND table.categoryId = (SELECT dbo.function_get_category_id(...));
我也考虑过尝试使用JOIN而只是将函数放在ON中。
有没有方便的方法来重写查询以从WHERE子句中移出一个函数(这是必需的)而不重写函数本身?
答案 0 :(得分:1)
不确定这是否会提高性能,但我认为这是一个标量,只需要解决一次。
Declare @categoryID varchar(100)
Set @categoryID = dbo.function_get_category_id('category config key')
SELECT *
FROM table
WHERE table.id = XX
AND table.categoryId = @categoryID