Tsql Sybase视图查询-硬编码值有效,但变量失败

Tsql Sybase视图查询-硬编码值有效,但变量失败,tsql,sybase,ibatis,Tsql,Sybase,Ibatis,有人知道为什么这在大约1秒内有效吗: select Q.USR_LOAD_NBR from QUAD0066..QTS_LOAD_INFO Q where Q.KY_TO_STP = 2142870 但这需要超过10秒(最多5分钟): 我在ibatis中遇到了与此查询完全相同的问题,除了ibatis在大约15秒内超时并导致我的代码失败。(不到1秒硬编码,带int参数超时)您有错误吗? 您是否使用不同的程序(例如ase isql和interactive sql)运行此代码?当您对值进行硬编码时,

有人知道为什么这在大约1秒内有效吗:

select Q.USR_LOAD_NBR from QUAD0066..QTS_LOAD_INFO Q where Q.KY_TO_STP = 2142870
但这需要超过10秒(最多5分钟):

我在ibatis中遇到了与此查询完全相同的问题,除了ibatis在大约15秒内超时并导致我的代码失败。(不到1秒硬编码,带int参数超时)

您有错误吗?
您是否使用不同的程序(例如ase isql和interactive sql)运行此代码?

当您对值进行硬编码时,查询优化器可以选择可能的最佳计划。 如果该值是变量,则不会发生这种情况,因为查询优化器不知道该值可能是什么

现在,您可以为
KY_TO_STP
列创建一个索引,通常您是非聚集的:

create nonclustered index on QTS_LOAD_INFO(KY_TO_STP)

如果希望
KY_TO_STP
中的每个值都是唯一的,可以添加
unique
,如果
KY_TO_STP
是主键,或者可以用它唯一地标识每一行(但不要忘记,每个表只能有一个聚集索引),则可以将
nonclustered
替换为
clustered
.

我正在使用qwerybuilder。我还在一个c#项目中使用ibatis。尝试使用交互式sql运行它(在sybase central中)。您将确保代码是正确的。可能是格式问题:多个空格或行尾不正确。我有时会遇到enter问题,但enter无法正常工作。我不知道ibatis,所以我不能帮你。@ParadoX你所说的不是一个解决方案,应该在评论中。是的,我知道。我没有选择“添加评论”。这很有道理。。。我以为发生了文本替换,但您是说查询正在发送变量?
create nonclustered index on QTS_LOAD_INFO(KY_TO_STP)