ITPub博客

首页 > 数据库 > SQL Server > 【SQL Server】创建索引,导致insert语句长时间等待

【SQL Server】创建索引,导致insert语句长时间等待

原创 SQL Server 作者:gulunhua 时间:2016-01-28 11:33:25 0 删除 编辑

SQL Server中创建索引,导致insert语句长时间等待,之前觉得在创建索引,应该会影响insert操作,但一直没有实际验证过,今天验证了下一下,果然是这样。

1、在会话1中创建索引:

点击(此处)折叠或打开

  1. create index idx_temp on temp(biz_date,func_code)


2、在会话2中插入一条数据:
insert into temp
select top 1 * from ms_visit_acvt

然后,会话2就阻塞住了。

3、在会话3中查询阻塞情况,和创建索引时所需要的锁:




从上图可以看出,会话1获取了表temp的S锁,而会话2在获取表temp的IX锁时,被阻塞住了,这里需要说明的是S锁与IX锁之间是不兼容的,所以会相互排斥,就会导致阻塞。

正因为在创建索引的时候,会导致dml语句阻塞,所以SQL Server推出了联机创建索引的功能,这样就不会导致阻塞问题了。


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/653220/viewspace-1983470/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2011-08-01

  • 博文量
    41
  • 访问量
    30677