1

有谁知道为什么这会在大约 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 参数超时)

4

2 回答 2

0

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

于 2012-08-22T15:12:30.320 回答
0

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

现在你可以做的是为KY_TO_STP列创建一个索引,prolly 你是一个非聚集的:

create nonclustered index on QTS_LOAD_INFO(KY_TO_STP)

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

于 2012-08-24T09:36:20.060 回答