我有一个运行速度非常快(1 秒)的查询,见下文:
SELECT *
FROM ( select ROW_NUMBER() OVER ( ORDER BY [Rank] DESC ) AS RowNum, *
FROM [product].[FnSearchKeyword]('basic', null, null, null, null, null, null, null)
) AS RowConstrainedResult
WHERE RowNum = 1 AND RowNum < 30
糟糕的是,如果我将此查询放在一个过程中,它需要 15 秒才能运行,如下所示:
CREATE anydata
@keywords nvarchar(4000),
@minimunRate int,
@priceFrom decimal,
@priceTo decimal,
@relaeseStart datetime,
@releaseEnd datetime,
@categoryList nvarchar(4000),
@storeList nvarchar(4000),
@rowBegin int,
@rowEnd int,
@orderBy int,
@isAdult bit = null
AS
SELECT *
FROM ( select ROW_NUMBER() OVER ( ORDER BY [Rank] DESC ) AS RowNum, *
FROM [product].[FnSearchKeyword]('basic', @minimunRate , @priceFrom , @priceTo , null, null, null, null)
) AS RowConstrainedResult
WHERE RowNum = 1 AND RowNum < 30
当我播放 SQL 时,返回延迟 15 秒:
exec anydata null, null, null, null, null, null, null, null, null, null, null
笔记:
函数 FnSearchKeyword 的参数在 AnyData 过程中具有相同的声明类型。
我在 exec 过程中传递了所有值“NULL”,只是为了得到与上面快速运行的查询相同的结果。参数范围没有变化
老实说,当我通过程序运行查询时,我注意到“执行计划”发生了变化,但不知道如何解决这个问题,因为查询的参数是相同的。
不幸的是,由于此处未提及的其他原因,我需要将其放入 PROC 查询中,以免使问题进一步复杂化。
关于重复消息:它的问题没有重复,因为它在任何系统(查询分析器、C# asp.net 等)中运行缓慢。