有谁知道为什么这会在大约1秒内发挥作用:
select Q.USR_LOAD_NBR from QUAD0066..QTS_LOAD_INFO Q where Q.KY_TO_STP = 2142870
但这需要超过10秒(最多5分钟):
declare @groupId int
set @groupId = 2142870
select Q.USR_LOAD_NBR from QUAD0066..QTS_LOAD_INFO Q where Q.KY_TO_STP = @groupId
我遇到了与ibatis完全相同的问题,除了ibatis在15秒内超时并导致我的代码失败。 (硬编码不到1秒,使用int参数超时)
答案 0 :(得分:0)
你有错误吗? 您是否使用不同的程序运行此代码(例如ase isql和interactive sql)?
答案 1 :(得分:0)
当您对值进行硬编码时,查询优化器可以选择最佳计划。 当值是变量时不会发生这种情况,因为查询优化器不知道该值是什么。
现在你可以做的是为KY_TO_STP
列创建一个索引,你很可能是非聚集的:
create nonclustered index on QTS_LOAD_INFO(KY_TO_STP)
如果您希望unique
中的每个值都是唯一的,则可以添加KY_TO_STP
,如果nonclustered
是主键,您可以clustered
替换KY_TO_STP
或者如果你可以使用它来单独识别每一行(但不要忘记每个表只能有一个聚集索引)。