我有35个大型(1M加行,35列)数据库,每个数据库都根据主键进行每行导入更新。
我正在考虑将这些更新分组为块,禁用密钥然后重新启用它们。
有人知道何时禁用密钥。即如果我要更新单个记录,那将是一个糟糕的想法,但如果我想更新每条记录,那将是一个好主意。是否有任何数学公式要遵循这一点,还是应该保持基准?
答案 0 :(得分:4)
当我注意到插入/更新会产生特殊的性能影响时,我会禁用我的密钥。这些是最容易陷入外键问题的。如果插入中有很多列和非空属性,那么将行插入具有数千万条记录的完全键控/索引表可能是一场噩梦。我不担心小表中的键/索引 - 在较小的表中(假设~500,000行或更少,可能有6或7列)键可能不会杀死你。
如上所述,您还必须考虑在执行此操作时禁用索引的实时管理。如果数据库实时维护指数将减慢更改操作的速度数据库中的表也是如此。
关于数学论坛:关于数据库大小,当您执行/没有索引时,可以查看插入/更新速度的趋势。在某些时候(即你的数据库达到一定的大小)你可能会发现插入的时间开始几何增加....或者它需要一个陡峭的“跳跃”。如果您可以在系统中找到这些点,您就会知道何时将其推到极限 - 并且一位优秀的管理员甚至可以告诉您为什么,在这些点上,系统性能正在下降。
具有讽刺意味 - 有时键/索引会加快速度!索引和键可以通过快速进行任何子查询或其他操作(线性时间)来加速某些更新和插入。因此,如果操作很慢,您可能会问自己“是否有一些静态数据可以索引以加快查找操作”?