我有一个包含 50 列和大约 10 列 (FK) 的非聚集索引的表。该表包含大约 1000 万条记录。
我的问题是:在更新表中的 10k 行期间索引何时更新(更新包括索引列)?是在每行更新后还是在整个更新完成后发生?
问题是更新时间很长,我们收到数据库连接超时。如何提高更新时间?我无法在更新之前删除索引并在以后重建它们,因为该表在更新期间也被大量使用。
我有一个包含 50 列和大约 10 列 (FK) 的非聚集索引的表。该表包含大约 1000 万条记录。
我的问题是:在更新表中的 10k 行期间索引何时更新(更新包括索引列)?是在每行更新后还是在整个更新完成后发生?
问题是更新时间很长,我们收到数据库连接超时。如何提高更新时间?我无法在更新之前删除索引并在以后重建它们,因为该表在更新期间也被大量使用。
您应该对表进行分区并尝试使用本地索引。通过分区,您正在划分表数据,以便您可以对相关数据进行操作。
本地索引也意味着索引也是分区的,因此速度将显着提高。
看看这个链接:http: //msdn.microsoft.com/en-in/library/ms190787.aspx
我们有一个庞大的系统,主表也有几百万条记录……至少以前是这样。我们将超过 6 个月的数据移到存档表中。通常,旧数据仅用于报告目的。通过这样做,我们能够极大地提高实时系统的性能。话虽如此,这对您来说可能不是一个可行的解决方案。
索引是否碎片化(更新表和 FK 表)?
列的类型,它是否为空?
你能忍受脏读(nolock)吗?
你能忍受不检查 FK 约束吗?
请发布更新声明?
我相信您正在检查是否不使用相同的值进行更新。
update tt
set col1 = 'newVal'
where col1 <> 'newVal'
如果这些索引状况良好,更新 10 K 行应该会非常快。
填充因子可能会有所帮助。