kar*_*hik 2 sql t-sql sql-server performance sql-server-2005
用户定义函数用于存储过程.用户定义函数返回标量值.遵循用户定义函数中使用的逻辑
CREATE FUNCTION [dbo].[udf_Test] ( @Code varchar(10), )
RETURNS bit AS
BEGIN
DECLARE @bFlag bit
SELECT @bFlag = COUNT(id)
FROM tbL1
WHERE Code = @Code
IF @bFlag = 0
BEGIN
SELECT @bFlag = COUNT(id)
FROM tbl2
WHERE LTRIM(RTRIM(Code)) = @Code
END
IF @bFlag = 0
BEGIN
SELECT @bFlag = COUNT(id)
FROM tbl3
WHERE LTRIM(RTRIM(Code)) = @Code
END
IF @bFlag = 0
BEGIN
SELECT @bFlag = COUNT(id)
FROM tbl4
WHERE LTRIM(RTRIM(Code)) = @Code
END
RETURN @bFlag
Run Code Online (Sandbox Code Playgroud)
这是提高上述用户定义函数性能的正确方法吗?
提高性能的最佳方法是完全抛弃UDF.
我发生的一个直接的事情是
LTRIM(RTRIM(Code)) = @Code
Run Code Online (Sandbox Code Playgroud)
因为每次调用(即外部查询中返回的每一行)都可能导致最多4次表扫描.
如果在查询中使用内联CASE表达式替换UDF中的逻辑,则可能会获得更优越的执行计划.即使你不能使谓词至少变得可思议,它也会允许优化器探索不同的连接策略,例如散列连接,而不是强制重复扫描相同的表.
| 归档时间: |
|
| 查看次数: |
973 次 |
| 最近记录: |