在T-SQL中正确使用字符常量以取得最佳性能

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

先看例子:

use

 

 

 

 

tempdb;

 

-- Numbers 方便插入数据

 

 

 

CREATE

 

 

TABLE dbo . Numbers ( n INT NOT NULL PRIMARY KEY )

GO

 

DECLARE

 

 

@i INT ;

 

 

SET

 

 

@i = 1 ;

 

 

INSERT

 

 

INTO dbo . Numbers ( n ) SELECT 1 ;

 

 

WHILE

 

 

@i < 1024000 BEGIN

 

 

INSERT INTO dbo.Numbers(n)

 

 

SELECT n + @i FROM dbo.Numbers;

 

 

SET @i = @i * 2;

 

 

END

 

 

;

GO

 

CREATE

 

 

TABLE dbo . Users ( MessageID INT NOT NULL PRIMARY KEY ,

SenderID

 

INT NOT NULL,

ReceiverID

 

INT NOT NULL,

FirstName

 

varchar(50),

LastName

 

varchar(50));

GO

 

INSERT

 

 

INTO dbo . Users ( MessageID ,

SenderID

,

ReceiverID

,

FirstName

,

LastName

 

)

 

 

 

SELECT

 

 

n , n % 1000 , n / 1000 , n % 1000 , n % 10

 

 

FROM dbo . Numbers ;

GO

 

-- 将其中一条记录的LastName改成WSW

UPDATE

 

 

dbo . Users SET LastName = 'WSW'

 

 

WHERE SenderID = 123 AND ReceiverID = 456;

 

 

 

 

 

 

GO

 

create

 

 

index idx_LastName on Users ( LastName

)

 

 

 

 

select LastName from Users

where LastName='WSW'

 

 

go

select

 

LastName from Users

where

 

LastName=N'WSW'

 

 

go

 

以上两句执行效率没有明显差别。

 

不过以下两句可就完全不同了:

 

select

 

* from Users

where

 

LastName='WSW'

go

select

 

* from Users

where

 

LastName=N'WSW'

 

请看执行计划:

 

 

 

通过执行计划可以看出使用'WSW'和N'WSW'的性能有天壤之别。

 

结论:

当数据库索引字段设计为VARCHAR时,传入VARCHAR字符常量,查询性能明显由于传入NVARCHAR字符常量。

所以,在查询条件中传入字符常量时,应该根据数据库设计的数据类型正确的传入unicode字符或者非unicode字符以取得最佳的数据库性能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值