如:表a 建立函数
FUNCTION [dbo].[ toola](@a [nvarchar](4000), @txt [nvarchar](4000))
RETURNS [smallint] WITH EXECUTE AS CALLER
select * from a order by toola(a.字段1,'aaa') desc
很慢 ,该表 其他地方 用到过索引 ,数据量也大
order by toola(a.字段1,'aaa') desc
order by 自定义函数,肯定会慢的;
op 10 ,也是先把所有的行,都按这个函数做一下计算,再排序,最后取前 10 行,所以速度也是慢的;
本人采用 标量函数
CREATE FUNCTION CGF_FN_Search(@inStr VARCHAR(500),@fndStr VARCHAR(500),@doc VARCHAR(5))
RETURNS INT
AS
BEGIN
DECLARE @i INT,@c VARCHAR(500),@fStr VARCHAR(500)
SET @fStr = @fndStr
WHILE(LEN(@fStr) > 0)
BEGIN
SET @i = Charindex(@doc, @fStr)
IF(@i = 0)
BEGIN
IF(CHARINDEX(@fStr,@inStr) > 0)
RETURN 1
ELSE
RETURN 0
END
ELSE
BEGIN
SET @c = SUBSTRING(@fStr,1,@i-1)
IF(CHARINDEX(@c,@inStr) > 0)
RETURN 1
ELSE
SET @fStr = SUBSTRING(@fStr,@i+LEN(@doc),LEN(@fStr))
END
END
RETURN 0
END
速度比之前快了 不少,cpu 时间快了 40倍,执行时间快了5倍