0

我有一个包含 50 列和大约 10 列 (FK) 的非聚集索引的表。该表包含大约 1000 万条记录。

我的问题是:在更新表中的 10k 行期间索引何时更新(更新包括索引列)?是在每行更新后还是在整个更新完成后发生?

问题是更新时间很长,我们收到数据库连接超时。如何提高更新时间?我无法在更新之前删除索引并在以后重建它们,因为该表在更新期间也被大量使用。

4

3 回答 3

3

您应该对表进行分区并尝试使用本地索引。通过分区,您正在划分表数据,以便您可以对相关数据进行操作。

本地索引也意味着索引也是分区的,因此速度将显着提高。

看看这个链接:http: //msdn.microsoft.com/en-in/library/ms190787.aspx

于 2013-04-07T11:24:15.510 回答
0

我们有一个庞大的系统,主表也有几百万条记录……至少以前是这样。我们将超过 6 个月的数据移到存档表中。通常,旧数据仅用于报告目的。通过这样做,我们能够极大地提高实时系统的性能。话虽如此,这对您来说可能不是一个可行的解决方案。

于 2013-04-07T11:25:57.103 回答
0

索引是否碎片化(更新表和 FK 表)?
列的类型,它是否为空?
你能忍受脏读(nolock)吗?
你能忍受不检查 FK 约束吗?

请发布更新声明?
我相信您正在检查是否不使用相同的值进行更新。

update tt 
set col1 = 'newVal' 
where col1 <> 'newVal'

如果这些索引状况良好,更新 10 K 行应该会非常快。
填充因子可能会有所帮助。

于 2013-04-07T13:39:14.700 回答