如何有效地生成大量行

时间:2013-05-30 12:10:59

标签: mysql database

我需要在一个表中生成大量行,遗憾的是,需要在应用程序端(PHP)生成一列。

所以基本上我需要生成这样的东西:

 id |  encoded_val_based_on_id
-------------------------------
  1 | my_encode_func( 1 )      
-------------------------------
  2 | my_encode_func( 2 )      
-------------------------------
  3 | my_encode_func( 3 )      
-------------------------------
  4 | my_encode_func( 4 )      

我认为,必须有更好的方法然后生成N查询以获取N ID,然后使用“encoded_val_based_on_id”更新这些记录。

除此之外,我想在“encoded_val_based_on_id”上保留唯一索引,我无法做到这一点,因为我会生成空白行然后填充它们。

我可以锁定表格,获取最后一个ID,通过在我的应用程序中递增来生成ID +生成所有其他内容,插入它们并解锁表格。我不认为这是正确的方法,但至少可以在1个查询(批量插入)中完成,我可以在那里保留唯一索引。

1 个答案:

答案 0 :(得分:1)

在完成插入之后,您不知道id的值(假设自动增量)。

最佳解决方案是将函数生成为可以从SQL调用的值。然后,您可以在insert上使用触发器来获取id并计算该值。但是根据你所说的这不可行。

InnoDB和MyISAM allows you在UNIQUE索引中都有NULL值。

我想我很想插入X行,该字段为空/空。然后检索该字段为null的所有行,获取id字段。然后计算id字段中的值并更新行。

这当然可能意味着多次更新,这非常可怕。解决方法是使用INSERT ..... ON DUPLICATE KEY UPDATE进行更新。正如您指定id一样,您将触发每行的更新,并且因为您可以在单个插入查询中拥有数千行,这可以非常有效地完成。