我用20w条记录做了测试[结果记录1w条],好像没有什么差别, select * from mis_so_dtl where substring(mnfctr,1,5)='53112' cpu:297 reads:3843 duration:1406
declare @aa nvarchar(10) set @aa='53112' select * from mis_so_dtl where substring(mnfctr,1,5)=@aa 313 3869 1563 declare @aa varchar(10) set @aa='53112' select * from mis_so_dtl where substring(mnfctr,1,5)=@aa 266 3869 1560
这个问题第12个回答:
还有我发现在不同的机子上结果也有不同, 比方我的客户机子上, 第二种就根本解决不了
这个问题第13个回答:
up
这个问题第14个回答:
sql的 版本是一样的吗?还有语言类型什么的?
这个问题第15个回答:
@_@
sy_test表的SN字段,它的类型是VARCHAR 还是NVARCHAR ?
这个问题第16个回答:
看了12楼的执行计划,我也晕了. 居然有一个会是index scan...
这样,一步一步的找原因吧.
SQL code
/*后来在自己电脑上找了一个结构相似的表作测试
发现在第二种写法比第一种要慢几十倍, 后又把参数DECLARE @AAA NVARCHAR(50) 改为 DECLARE @AAA VARCHAR(50)
查询速度又一样快了
>>>>
在你的电脑上清除执行计划的cache.然后再试慢的那个,看它生成什么样的执行计划.
*/
DBCC FREEPROCCACHE
GO
DBCC DROPCLEANBUFFERS
GO
--SET SHOWPLAN_ALL ON --查看执行计划.
DECLARE @SN NVARCHAR(10)
SET @SN='111111111'
SELECT * FROM sy_test WHERE SN=@SN --先试这个
SELECT * FROM sy_test WHERE SN=CAST(@SN AS VARCHAR(20)) --再看这个的执行速度.
这个问题第17个回答:
SN字段是 varchar 50
SELECT * FROM sy_test WHERE SN=@SN --耗时 1分40秒 SELECT * FROM sy_test WHERE SN=CAST(@SN AS VARCHAR(20)) --耗时 00秒