我有一个包含大约10列(FK)的50列和非聚集索引的表。该表包含约1000万条记录。SQL索引和更新时机
我的问题是:什么时候更新表中的10k行更新索引(更新包括索引列)?这是在每次更新后还是整个更新完成后发生的?
问题是更新很长,我们收到一个数据库连接超时。我怎样才能提高更新时间?我无法在更新之前删除索引并稍后重建它们,因为在更新过程中该表也被大量使用。
我有一个包含大约10列(FK)的50列和非聚集索引的表。该表包含约1000万条记录。SQL索引和更新时机
我的问题是:什么时候更新表中的10k行更新索引(更新包括索引列)?这是在每次更新后还是整个更新完成后发生的?
问题是更新很长,我们收到一个数据库连接超时。我怎样才能提高更新时间?我无法在更新之前删除索引并稍后重建它们,因为在更新过程中该表也被大量使用。
您应该对表进行分区并尝试使用本地索引。 通过划分您将划分表格数据,以便您可以对相关数据进行操作。
本地索引也意味着索引也是分区的,所以速度会显着提高。
看一看这个链接:http://msdn.microsoft.com/en-in/library/ms190787.aspx
感谢您的链接,这是我应该调查的新内容。也许这是我们需要的。 – 2013-04-07 11:37:37
我们有一个庞大的系统,主表也有几百万条记录....至少它用。我们将超过6个月的数据移出到归档表。通常情况下,旧数据仅用于报告目的。通过这样做,我们能够极大地提高现场系统的性能。这就是说,这可能不是一个可行的解决方案。
不幸的是,这个表格包含无法移动到存档的“实时”数据:( – 2013-04-07 11:36:31
索引是否分段(更新表和FK表)?
列的类型,它是否为空?
你可以住脏读(nolock)?
你可以住在没有检查FK禁忌?
请发布更新声明?
我相信你,你正在检查不更新相同的价值。
update tt
set col1 = 'newVal'
where col1 <> 'newVal'
如果这些索引状况良好,更新10 K行应该是相当快的。
填充因子可能有帮助。
索引更新...更新时。如果它们是非聚集索引,而且您没有更改其密钥或覆盖列,则可能它们从未更新过。看看执行计划。如果您的连接超时,但您确信更新会完成,也许您遇到了默认超时不适合您的情况。如果你不能将更新分解成更小的块,也许你可以尝试更多或更少的积极锁定。等等等等。 – 2013-04-07 11:25:38
索引增强选择和读取数据的速度,但会降低更新速度。如果你通常比选择更多的更新,索引可能会对你造成负面影响 – Filip 2013-04-07 11:37:04