首页 > 数据库 > SQL Server > 正文

SQL Server优化器特性-动态检索

2024-08-31 00:54:48
字体:
来源:转载
供稿:网友
SQL Server优化器特性-动态检索

前段时间我写的文章 SQL Server 隐式转换引发的躺枪死锁 中有的朋友评论回复说在SQL2008R2测试时并未出现死锁,自己一测果然如此,因此给大家带来的疑惑表示抱歉,这里我就解释下其原因.

回顾:SQL2012中发生死锁的原因已经向大家解释了,因为隐式转换造成的表扫描扩大了锁规模.但在SQL2008R2中就未有同样的现象出现,很显然锁规模没有扩大,原因在于SQL Server的优化器为我们做了额外的事情-动态检索

动态检索:基于索引查找的优势,SQL Server(部分版本)会尝试将一些情形进行内部转换,使得索引检索的覆盖面更广,对其实重要补充.

还是之前那篇的实例,我们在SQL2008R2中看到的update的执行计划如图1-1

Code 生成测试数据

create table testlock(ID varchar(10) PRimary key clustered,col1 varchar(20),col2 char(200))go----------create test tabledeclare @i intset @i = 1while @i < 100begininsert into testlockselect right(replicate('0',10)+ cast(@i as varchar(10)),10),'aaa','fixchar'set @i = @i+1endgo----------generate test data
View Code

Code 死锁语句

declare @ID nvarchar(10)begin tran select  top 1 @ID = ID from testlock with(updlock, rowlock, readpast)where col1 = 'aaa'order by id ascselect  @IDwaitfor delay '00:00:20'update testlock set col1 = 'bbb' where id = @IDcommit tran
View Code

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表