SQL索引和更新时间

时间:2013-04-07 11:22:04

标签: sql sql-server tsql indexing

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

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

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

3 个答案:

答案 0 :(得分:3)

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

本地索引也意味着索引也被分区,因此速度将大幅提升。

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

答案 1 :(得分:0)

我们有一个庞大的系统,主表也有几百万条记录....至少它曾经用过。我们将超过6个月的数据移到存档表中。通常,旧的数据仅用于报告目的。通过这样做,我们能够大大提高我们的实时系统的性能。话虽如此,这可能不适合你。

答案 2 :(得分:0)

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

请发布更新声明?
我相信你正在检查不会更新相同的值。

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

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