日期:2014-05-17  浏览次数:20949 次

给sql server 数据库表建立索引,状态一直为suspended
我这里有汗几十亿数据的数据表,要为表建立聚集型索引和非聚集性索引,之前的时候建立一次索引大概在7小时左右,但是现在数据表删除了一部分数据,要重新创建索引,结果建立一次索引大概要24小时,后来再建立索引,通过
select *
from
sys.dm_exec_requests
查询事物状态时,status 为:suspended,然后我取消操作重新执行创建索引,状态依然为suspended.
备注:此数据表被收缩过,我想建立索引,怎么样才能快速建立呢
索引?supended?阻塞

------解决方案--------------------
如果有分区就不用再建分区了,直接在分区上建索引,而不要在整个表上建索引。
------解决方案--------------------
根据表数据量,创建索引、重建或重组索引的时间会随着数据量的增加而增加
过亿的表肯定要很长的时间

进程状态为suspended:会话正在等待事件(如 I/O)完成
说明操作正在进行中,是正常现象

创建索引是会锁表的,阻塞其他资源,尤其这么长时间。。。

分区还分好几亿这个没办法了,我知道的唯一途径就是尽量把表分小一点,如果业务或者其他因素不行的话,再看看其他大神的回答吧呵呵~


------解决方案--------------------
引用:
为某个表创建索引应该只锁定某个表而已,但是为什么其他的表业额比锁定了呢,查看其他表的属性都无法打开 

表属性的查看就是查询一些系统表,尤其图形化的操作,会产生大量的必要的和非必要的系统表的查询操作,你创建索引一是锁定该表本身,二还要锁定该表涉及到的系统表,这样就造成你用图形化方法去查看其他表结构属性时,可能造成冲突进而阻塞