2012-03-20 106 views
0

我们使用innodb,并有一个表格,将有数百万行。其中将是varchar(32),其价值将经常改变。在成千上万行上更新这个varchar将需要很长时间,所以我们试图将这个字段拆分到它自己的表中,然后不做更新,我们可以执行删除,然后进行批量插入使用文件中的加载数据。
看起来这会大大提高性能。我是否错过了一些东西?
有更简单的方法来提高更新性能吗?有没有人做过这样的事情?更新与插入

回答

0

如果您可以根据独立参数选择要更新的行,实际上应该与您的建议一样(并且仍然保持一个理智的数据组织,因此更可取)。安静可能这比自己做得更快。

+0

我们将更新或插入的行将基于索引ID。我提议的方式根本没有查找,因为我们在插入前已经拥有了所有ID(请参阅其他帖子的评论)。我喜欢这种可能的解决方案,因为我注意到与插入相比,更新需要很长时间。 – user1280851 2012-03-22 18:58:44

0

您可以创建适合更新语句的where子句的索引。

分裂它的想法可能会提高性能(我不确定),但只有当所有值一次改变时。当个体价值观发生变化时,这种方法比采用单一表格的方法要慢。

更快速的另一个先决条件是,您必须事先知道第二个表的键 - >值映射。如果您必须查看第一个表以决定如何在第二个表中存储值,那么您的速度也比使用一个表慢。

+0

我们将拥有关键值对。基本上我们做一个查询来查看我们需要什么id来获得值,然后我们离开并获取值(即不在sql中,只是一些外部源)。一旦我们获得所有的值,我们就拥有一大组ID /值对。我的想法是,如果我们为这个东西使用一个单独的表,那么我们可以做一个删除,其中id在(...)中,然后做一个ID /值对的批量插入。这避免了每个更新语句的索引查找。我们可以使用非常快速的加载数据。 – user1280851 2012-03-22 18:53:36