有遇到这样的情况, 因为这是查询优化器的选择问题, 所以不好控制.一般用两种方法解决: 1. 强制指定索引 Declare @UserName varchar(128) SET @UserName='SQLSERVER' Select * from User Where UserName=@UserName WITH(INDEX=你想使用的索引名)
2. 使用JOIN 经过测试, 类似下面的方法是可行的DECLARE @UserName TABLE(UserName varchar(128) PRIMARY KEY) INSERT @UserName VALUES('SQLSERVER') Select A.* from User A, @UserName B WHERE A.UserName=B.UserName
谢谢邹建大哥的赐教,我找到问题了,分享一下,这里是我的问题 我查询的时候设的参数的数据类型是sysname,其实就是varchar(256) 我定义的字段的长度是varchar(128). 原因就处在这里,SQL Server 在设定查询计划的时候把sysname当成不同于varchar(128)的数据类型,所以产生了索引扫描。又学到了新东西,还是出点问题好啊~~~
1. 强制指定索引
Declare @UserName varchar(128)
SET @UserName='SQLSERVER'
Select * from User Where UserName=@UserName WITH(INDEX=你想使用的索引名)
经过测试, 类似下面的方法是可行的DECLARE @UserName TABLE(UserName varchar(128) PRIMARY KEY)
INSERT @UserName VALUES('SQLSERVER')
Select A.* from User A, @UserName B
WHERE A.UserName=B.UserName
我查询的时候设的参数的数据类型是sysname,其实就是varchar(256)
我定义的字段的长度是varchar(128).
原因就处在这里,SQL Server 在设定查询计划的时候把sysname当成不同于varchar(128)的数据类型,所以产生了索引扫描。又学到了新东西,还是出点问题好啊~~~