我编写了一个.Net应用程序,它有一个SQL Server 2008 R2数据库,表的数量相对较少,但在某些表中可能有大约100,000,000条记录!为了提高SELECT的性能,我创建了必要的索引并且运行良好。但是,众所周知,索引需要在碎片化时重建。
我们在一台客户PC和我的Winforms应用程序上安装了SQL Server 2008 R2 Express。另外三台PC通过常规局域网连接到这个数据库,一切似乎都很好。
现在,问题在于,我想重建索引,例如每次用户在任何机器上开始使用我的程序时。好吧,我可以执行几个ALTER INDEX,但正如MS docs中所述,OFFLINE索引将锁定索引期间的表。这意味着当用户启动程序时,其他用户将无法访问表!我知道有一个ONLINE选项,但它在SQL Server的Express版本中不起作用。
在真实服务器一直运行的其他环境中,我会创建一个代理作业,它可以在一夜之间重建索引。
我该如何解决这个问题?
答案 0 :(得分:1)
如果没有正常的24/7服务器运行,很难在不打扰用户的情况下自动进行此类维护。我认为把这份工作放在应用程序启动时并不是一个好主意,因为它可以在没有真正原因的情况下真正开始多次,并且如果表格很大,也会显着减慢启动速度,此外还要让其他人在你身边说。
我会选择2个选择: