如何重建某个数据库中的所有索引,其中索引中的记录数小于特定计数

时间:2014-09-17 18:31:36

标签: sql sql-server tsql indexing

我想重建一个给定数据库中的所有索引,其中索引中的记录数小于某个计数就说100k

我如何编写这样的SQL Server 2014查询?

非常非常

1 个答案:

答案 0 :(得分:1)

一个小小的PowerShell有很长的路要走

import-module sqlps;

$srv = new-object microsoft.sqlserver.management.smo.server 'your-server';
$db = $srv.databases['your-db'];
foreach ($tbl in $db.Tables) {
  foreach ($idx in $tbl.Indexes) {
    foreach ($prtn in $idx.PhysicalPartitions) {
      if ($prtn.RowCount -gt 100000) {
        if ($idx.IsPartitioned) {
          $idx.Rebuild($prtn.PartitionNumber);
        }
        else {
          $idx.Rebuild();
        }
      }
    }
  }
}

如果要重建,当且仅当索引的聚合行数高于阈值时,将所有分区的rowcount加在一起,如果超过阈值,则在索引上调用rebuild()。 / p>