Sqlperformance SQL Server性能选项(重新编译)和重命名变量

Sqlperformance SQL Server性能选项(重新编译)和重命名变量,sqlperformance,Sqlperformance,我们在企业应用程序中有几个过程表现出奇怪的行为。有些过程会“卡住”并且永远不会返回,在大型数据库上运行数小时。我们能够在一些测试数据库上复制这种行为。奇怪的是,通过重命名传入的一些变量,我们几乎可以立即运行并返回过程,或者我们发现使用option(重新编译)具有相同的效果。我觉得奇怪的是,在这样做之后,非常小的数据库似乎被卡住了,永远不会返回。因此,我们似乎可以让他们研究小而不是大,或者研究大而不是小。我需要一些关于找什么的建议。这发生在几个存储过程中 程序布局为: CREATE procedu

我们在企业应用程序中有几个过程表现出奇怪的行为。有些过程会“卡住”并且永远不会返回,在大型数据库上运行数小时。我们能够在一些测试数据库上复制这种行为。奇怪的是,通过重命名传入的一些变量,我们几乎可以立即运行并返回过程,或者我们发现使用option(重新编译)具有相同的效果。我觉得奇怪的是,在这样做之后,非常小的数据库似乎被卡住了,永远不会返回。因此,我们似乎可以让他们研究小而不是大,或者研究大而不是小。我需要一些关于找什么的建议。这发生在几个存储过程中

程序布局为:

CREATE procedure [dbo].[proc_sample_proc]
  @var1     guid
, @var2     guid = null
, @var3     guid
, @var4     guid
, @var5         varchar(20) = null
, @var6     varchar(20) = null
as

if  @var1 = @var2
set @var2 = null

DECLARE @var7
SELECT @var7 = dbo.udf_TTTT_GetSOMEUDF(@var4)

SELECT
//somefields
FROM
atable
INNER JOIN btable ON a=b
LEFT JOIN ctable on (nolock) b=@var3
LEFT JOIN dtable on c=d
LEFT JOIN etable on d=e
LEFT JOIN ftable on (nolock) e=@var4
INNER JOIN gtable on f=g
LEFT JOIN htable on g=h
WHERE @var1=somevalue AND @var5=anothervalue
ORDER BY somefields

OPTION(RECOMPILE) <-- I Know this is BAD
创建过程[dbo]。[proc\u sample\u proc]
@var1 guid
,@var2 guid=null
,@var3 guid
,@var4 guid
,@var5 varchar(20)=空
,@var6 varchar(20)=空
作为
如果@var1=@var2
设置@var2=null
声明@var7
选择@var7=dbo.udf\u TTTT\u GetSOMEUDF(@var4)
挑选
//某些领域
从…起
阿塔布尔
a=b上的内部联接b表
左连接ctable on(nolock)b=@var3
c=d上的左联接数据表
d=e上的左联接表
左连接ftable on(nolock)e=@var4
f=g上的内连接GTTable
g=h上的左连接htable
其中@var1=某个值,@var5=另一个值
按某些字段排序

选项(重新编译)如何在select语句中使用参数var1、var2..etc?或者你不是吗?它们在连接和where子句中使用