Sql 这个函数有多优化
我要实现这个函数来计算一些数字Sql 这个函数有多优化,sql,sql-server,sql-server-2005,tsql,user-defined-functions,Sql,Sql Server,Sql Server 2005,Tsql,User Defined Functions,我要实现这个函数来计算一些数字 CREATE FUNCTION [dbo].[funLookupFTE] (@PFID int) RETURNS VARCHAR(20) AS BEGIN DECLARE @NumberOfFTE AS VARCHAR(20) SET @NumberOfFTE = (SELECT SUM(CASE WHEN Hours <= 20 THEN 0.5 WHEN Hours > 20 THEN 1 END) AS FTECount
CREATE FUNCTION [dbo].[funLookupFTE] (@PFID int) RETURNS
VARCHAR(20) AS BEGIN
DECLARE @NumberOfFTE AS VARCHAR(20)
SET @NumberOfFTE = (SELECT SUM(CASE WHEN Hours <= 20 THEN 0.5 WHEN Hours > 20 THEN 1 END) AS FTECount
FROM tblPractitioners
WHERE PFID =
@PFID)
RETURN @NumberOfFTE
END
只是想看看它是否是最优的,它不会自行处理问题。如果要在任何类型的查询中调用它,您最好使用子查询而不是用户定义的函数 例如:
SELECT * FROM tblPractioners P1
INNER JOIN
(
SELECT PFID, SUM(CASE WHEN Hours <= 20 THEN 0.5 WHEN Hours > 20 THEN 1 END)
AS FTECount
FROM tblPractitioners
GROUP BY PFID
) P2 ON P1.PFID = P2.PFID
用户定义函数的性能可能非常差,但是您确实需要使用子查询或UDF来比较执行计划,看看哪个更好。如果要在任何类型的查询中调用它,您可能最好使用子查询而不是用户定义函数 例如:
SELECT * FROM tblPractioners P1
INNER JOIN
(
SELECT PFID, SUM(CASE WHEN Hours <= 20 THEN 0.5 WHEN Hours > 20 THEN 1 END)
AS FTECount
FROM tblPractitioners
GROUP BY PFID
) P2 ON P1.PFID = P2.PFID
用户定义函数的性能可能非常差,但您确实需要使用子查询或UDF来比较执行计划,看看哪一个更好。为什么要将求和值返回为varchar20?重要的不是函数,而是模式。您有什么索引,表有什么基数?为什么返回一个和值作为varchar20?重要的不是函数,而是模式。你有什么索引,桌子有什么基数?@OMG-嘿,我去吃了几个小时的晚餐,你们有机会。哎呀,我不知道有多晚了@天哪,小马们,看谁在说话!!:-:-我说,你们两个都给我们留下了一些-@疯子:先生,你伤害了我你的评论让我崩溃了:但谢谢你的见解。@OMG-嘿,我去吃了几个小时的晚餐,你们有机会。哎呀,我不知道有多晚了@天哪,小马们,看谁在说话!!:-:-我说,你们两个都给我们留下了一些-@疯子:先生,你伤害了我你的评论让我崩溃了:但谢谢你的见解。