如何更好地处理where子句中的函数

时间:2016-05-26 20:59:51

标签: sql-server optimization

我正在使用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子句中移出一个函数(这是必需的)而不重写函数本身?

1 个答案:

答案 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