为什么对索引字段使用sp_prepexec查询的性能不佳,为什么呢?

时间:2018-10-10 05:27:39

标签: sql-server performance prepared-statement

我使用SQL Server2012。

我有一张150万个人的桌子。在此表中,我有一个非聚集索引字段UR_ID。我使用的应用程序从我的个人表中选择数据。它使用以下查询:

declare @p5 int
exec sp_prepexec @p5 output,
N'@P1 nvarchar(4000),@P2 numeric(38,0),@P3 numeric(38,0)',
N'select a.INDIVIDUAL_ID as ID_OBJEC_1 
from dbo.INDIVIDUAL a 
where lower(a.UR_ID) like @P1 
and coalesce (a.FLD_DELETE, @P2 )= @P3 
order by a.LST_UPD_DT desc, a.INDIVIDUAL_ID asc',
N'1000004708691',0,0
select @p5

基本上,查询只是将查询从索引字段转换为记录的主键。在此示例中,'1000004708691'是搜索到的索引字段UR_IDFLD_DELETE表中的其他字段是LST_UPD_DTINDIVIDUAL

查询需要执行04.76秒。 因为我正在诊断性能问题,所以我使用以下查询来检查出什么问题了:

select a.INDIVIDUAL_ID as ID_OBJEC_1 
from dbo.INDIVIDUAL a 
where lower(a.UR_ID) like '1000004708691' 
and coalesce (a.FLD_DELETE, 0)= 0
order by a.LST_UPD_DT desc, a.INDIVIDUAL_ID asc

查询需要1.18秒才能执行。

我不明白为什么使用sp_prepexec会使查询慢5倍。 我也不明白为什么非聚集索引字段搜索可能要花多达1秒钟的时间来执行。

如何改善此处的演奏? 我想念什么?


编辑: Execution Plan of the Query

0 个答案:

没有答案