在MySQL中生成(即写入)一个行号索引列

在MySQL中生成(即写入)一个行号索引列,mysql,Mysql,我需要在MySQL表中根据表列的顺序建立行号索引。我知道这件事 SELECT ... @curRow := @curRow + 1 AS row_number ... 输出行号的技巧;然而,我真正想要的是将该行号作为持久列写入表中。性能是一个关键问题。做到这一点的最好方法是什么?一位朋友的提示挽救了这一天。这似乎是完成任务的最快方式: 通过添加自动增量列,创建一个列结构与原始表相同的新表 使用INSERT INTO将原始表中的数据添加到新表中。。。选择。。。订购人 删除原始表 在7秒内排了90

我需要在MySQL表中根据表列的顺序建立行号索引。我知道这件事

SELECT ... @curRow := @curRow + 1 AS row_number ...

输出行号的技巧;然而,我真正想要的是将该行号作为持久列写入表中。性能是一个关键问题。做到这一点的最好方法是什么?

一位朋友的提示挽救了这一天。这似乎是完成任务的最快方式:

  • 通过添加自动增量列,创建一个列结构与原始表相同的新表
  • 使用INSERT INTO将原始表中的数据添加到新表中。。。选择。。。订购人
  • 删除原始表

  • 在7秒内排了900万行。

    一位朋友的提示挽救了这一天。这似乎是完成任务的最快方式:

  • 通过添加自动增量列,创建一个列结构与原始表相同的新表
  • 使用INSERT INTO将原始表中的数据添加到新表中。。。选择。。。订购人
  • 删除原始表

  • 在7秒钟内完成了900万行。

    当你说“写入表格”时,你的意思是“每次插入一行时都写入表格”吗?或者您有一个只需要一次性更新就可以设置新的持久列的表吗?理想情况下,我有两个:首先,我需要通过为所有现有行插入列来更新表,从那时起,我希望在添加新行时自动插入列。表有多大?性能在这里将是一个绊脚石,因为每次插入新行时,决定新列的排名的任何进程都必须在每次插入新行时评估表中的所有行。为什么需要这个持久列?我需要该列根据记录快速访问上一个/下一个记录。这个表目前大约有900万行,这很难维护。如果删除行4567899(……或中间表中的某行)会怎么样?然后呢?您将在该行之后对每一行重新编号,以减少行数字段?我不认为这是可能的,除非你不关心性能。最接近这个值的是一个具有AUTO_INCREMENT属性的INT字段,但它也必须是主键的一部分(但它仍然没有达到您想要的效果)。当您说“写入到表中”时,您的意思是“每次插入一行时都写入表中”吗?或者您有一个只需要一次性更新就可以设置新的持久列的表吗?理想情况下,我有两个:首先,我需要通过为所有现有行插入列来更新表,从那时起,我希望在添加新行时自动插入列。表有多大?性能在这里将是一个绊脚石,因为每次插入新行时,决定新列的排名的任何进程都必须在每次插入新行时评估表中的所有行。为什么需要这个持久列?我需要该列根据记录快速访问上一个/下一个记录。这个表目前大约有900万行,这很难维护。如果删除行4567899(……或中间表中的某行)会怎么样?然后呢?您将在该行之后对每一行重新编号,以减少行数字段?我不认为这是可能的,除非你不关心性能。最接近这一点的是一个具有AUTO_INCREMENT属性的INT字段,但它也必须是主键的一部分(但它仍然不能完全实现您想要的)。