我有一个运行非常快(1秒)查询见下文:相同的SQL运行具有相同的参数或快或慢
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的过程同样声明的类型。
我传递的所有值“NULL”在EXEC程序,只需要有如上图所示的查询结果也一样跑得快。在参数的范围
老实说没有变化,我注意到,当我运行通过程序查询中的“执行计划”改变了,但不知道如何解决这个问题,因为的参数查询是一样的。
不幸的是我需要放在一个PROC查询里面,这里没有提到的其他原因不会使问题进一步复杂化。
关于重复的信息:它的问题isn't重复的,因为在任何系统中它的低速行驶(查询分析器,C#asp.net,其他)。
请参阅http://stackoverflow.com/questions/12483064/query-runs-fast-in-query-analyzer-but-slow-in- c-sharp-application和http://stackoverflow.com/questions/10175422/sql-runs-fast-in-ssms-slow-in-asp-net。可能与参数值无关,而是会话和/或过程的SET设置。 – 2013-02-21 18:15:40