我编写了一个 .Net 应用程序,它有一个 SQL Server 2008 R2 数据库,表数量相对较少,但在某些表中可能有大约 100,000,000 条记录!为了提高 SELECT 的性能,我创建了必要的索引并且效果很好。但是,众所周知,索引在碎片化时需要重建。
我们在其中一台客户 PC 和我的 Winforms 应用程序上安装了 SQL Server 2008 R2 Express。另外三台 PC 通过常规 LAN 连接到该数据库,一切似乎都很好。
现在,问题是,我想重建索引,例如每次用户开始在任何机器上使用我的程序时。好吧,我可以执行几个 ALTER INDEX,但正如 MS 文档中所述,离线索引会在索引期间锁定表。这意味着当用户启动程序时,其他用户将失去对表的访问权限!我知道有一个 ONLINE 选项,但它在 SQL Server 的 Express 版本中不起作用。
在其他始终运行真实服务器的环境中,我会创建一个代理作业,它会在夜间重建索引。
我怎么解决这个问题?