我在评论中读到
就像旁注一样,删除表的索引并在批量插入操作之后重新创建它们有时会更快.
这是真的?在哪种情况下?
和Joel一样,我会回应这样的说法:是的,这可能是真的.我发现识别他提到的场景的关键在于数据的分布以及特定表上的索引的大小.
在我曾经支持的应用程序中,定期批量导入180万行,表中有4个索引,1个有11列,表中总共有90列.索引导入需要20多个小时才能完成.删除索引,插入和重新创建索引只需要1小时25分钟.
所以它可以是一个很大的帮助,但很多都归结为您的数据,索引和数据值的分布.
是的,它是真实的.当插入期间表上有索引时,服务器将需要不断地重新排序/分页表以使索引保持最新.如果删除索引,则只需添加行而不必担心,然后在重新创建索引时立即构建索引.
当然,例外情况是导入数据已经按索引顺序排列.事实上,我应该注意到我现在正在开展一个项目,其中观察到了相反的效果.我们希望减少大型导入的运行时间(从大型机系统每晚转储).我们尝试删除索引,导入数据并重新创建它们.它实际上显着增加了导入完成的时间.但是,这不典型.它只是表明您应该始终首先测试您的特定系统.