在非常繁忙的表上创建索引

Rac*_*SQL 11 index sql-server sql-server-2008-r2

我们有一张桌子,insert\select每次都有很多(比如每秒有 100 台机器插入\更新)。

在不能被锁定的表上创建索引的最佳方法是什么?

如果我创建索引,我确定它会锁定请求,而我做不到。

这是一个有 100 万行+的大表。

Aar*_*and 12

没有这样的选项CREATE INDEX WITH (NOLOCK)(即使NOLOCK在查询上也需要锁,只是比没有提示的要少)。

您要做的最好的事情是WITH (ONLINE = ON),它在操作的开始和结束时仍然需要锁定(两者都与重新编译与表相关的计划有关 -有关更多详细信息,请参阅Paul Randal 的这篇博客文章)。

这将显着减少构建索引对您的应用程序的影响,但没有切实可行的方法来完全消除这种影响。此外,此功能不是免费的:它需要企业版。