2010-04-21 60 views
4
ALTER TABLE tablename AUTO_INCREMENT = 10000000 

此查询花费很长时间来更新。为什么?我需要优化这个查询。重置AUTO_INCREMENT在MySQL中花费很长时间

+2

为什么你需要这个查询?看起来你的表根本不需要自动增量主键。什么是表格结构和这种重置的目的是什么?无论如何,重建索引始终是耗费资源的操作。我希望你不是经常需要它 – 2010-04-21 10:03:02

+0

Hi Sharpnel, 非常感谢你的 你的快速反应。 在我们的网站中有用户生成的数据和管理员生成的数据。我们的用户数量也很大。 在这种情况下,如果管理员需要插入和更新批量数据,并且我们不想与用户数据冲突,那么我们通过重新设置自动保留ID增加和使用相同的插入和更新在几个表中。由于我们正在执行批量插入和更新操作,因此我们正在将查询写入文本文件,并通过命令行执行该操作。 我希望您能理解我的问题。请帮忙 – user320343 2010-04-21 10:37:53

回答

5

ALTER TABLE导致重建整个表 - 如果您的表包含很多行,则可能需要很长时间。

如果您只需要提高auto_increment值的值,最快的方法是插入一个虚拟行(然后删除该行,如果需要的话)。这只需要几分之一秒,而ALTER TABLE可能需要几天时间处理大型表格。

例如,假设我有一个表与一个auto_increment ID列和其他列COL1,COL2 ...:

insert into autoinc_table set ID = 10000000; 
delete from autoinc_table where ID = 10000000; 
+0

这似乎没有解决我的问题,这是一个int ID字段用完IDS。删除行本身并没有帮助,并且插入行似乎没有触发它重置其自动垦量值。 – 2012-08-03 21:10:27

+3

只有当您想要增加自动增量值时,此技巧才有效。这听起来像你想减少它。 – Martin 2012-08-08 16:17:13

5

用户和管理员数据不能按ID进行区分,而是由另一字段。 如果你将一个id作为一个抽象的标识符而没有其他意义,它会为你节省大量的时间和资源,相信我。

+0

你的意思是有另一个列,比如'user_type'或者有另一个带有用户目录的表吗? – Pathros 2018-02-22 20:52:19

+0

@Pathros取决于您的需求 – 2018-02-22 21:16:18

相关问题