在SQL Server中使用脱机索引

时间:2013-07-13 04:45:08

标签: sql-server winforms indexing

我编写了一个.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版本中不起作用。

在真实服务器一直运行的其他环境中,我会创建一个代理作业,它可以在一夜之间重建索引。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

如果没有正常的24/7服务器运行,很难在不打扰用户的情况下自动进行此类维护。我认为把这份工作放在应用程序启动时并不是一个好主意,因为它可以在没有真正原因的情况下真正开始多次,并且如果表格很大,也会显着减慢启动速度,此外还要让其他人在你身边说。

我会选择2个选择:

  • 在“服务器”上设置作业,以便在SQL Server启动或计算机启动时执行重建。当用户第一次打开电源时,它会减慢该PC的初始化速度,但一旦完成,它应该可以正常工作,并且很可能与夜间工作具有相似的结果。
  • 在应用程序中添加一个选项,以便在用户想要执行时手动启动重建索引作业,警告它需要一些时间,并且在此过程中其他任何人都无法使用它。虽然这提供了最大的灵活性,但它依赖于用户在开始注意延迟时这样做。