server论坛 sql

MS SQL Server 2000 表xsd:字段xsdh 聚集索引,字段xsrq 非聚集索引 ;表 xsmx:字段xsdh 聚集索引 表xsd,xsmx 通过xsdh关联,一对多
代码:select xsmx.* from xsd join xsmx on xsd.xsdh=xsmx.xsdh where xsrq>convert(datetime,'2022-11-01')
       使用索引一切正常,xsmx 使用的是clustered index seek ,执行时间110毫秒,如图:

img

img


但是如果在存储过程中使用的是传入的变量,代码如下:
declare @t varchar(15)
set @t=convert(datetime,'2022-11-01')
select xsmx.* from xsd join xsmx on xsd.xsdh=xsmx.xsdh where xsrq>@t
xsmx使用的查询方式确实clustered index scan,而不是之前的clustered index seek,执行时间也变为576毫秒 如图:

img

这是为什么呢?如果解决呢?因为我开发的系统大部分使用的是存储过程,所以变量很难避免