我有一个运行速度极快(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查询中,以免使问题进一步复杂化。
关于重复消息:它的问题没有重复,因为它在任何系统中运行都很慢(Query Analyzer、C#asp.net等)。