【问题标题】:Mysql Auto increment without indexMysql自动递增无索引
【发布时间】:2018-07-03 07:26:42
【问题描述】:

我认为这是不可能的,但我在这里要求确定。

以下是我的想法:

  • 我想插入许多行并为它们生成 id(使用自动增量)
  • 众所周知,1) 不索引,插入并在插入完成后添加索引,比 2) 先创建索引并插入要快。这是因为插入期间的索引开销

由于我正在执行插入...选择,我无法从应用程序生成 ID。

所以,基本上,完美的做法是拥有一个不需要索引的自动增量。

我不明白为什么mysql需要一个索引来实现自增?不能简单地存储最后插入的 id 然后递增它吗?

欢迎任何意见!

【问题讨论】:

  • 必须将 auto_increment 字段定义为主键 - 这是一个规则。
  • 您可以在insert ... select 中生成数字。您真的确定这是您的性能问题吗?
  • @P.Salmon 这实际上是不正确的。只需要一个索引。你不需要PK。然后,我问为什么这是一个规则。如果您阅读了我的问题,那么我知道这一点是微不足道的……抱歉粗鲁^^
  • @juergend 您是否建议类似“INSERT ... SELECT \@id = \@id + 1”?我认为这将是一个选择!我们正在处理大量的数据插入,所以如果它们可以通过索引后速度提高 10%... 我正在寻找所有优化 ;-)
  • @Vincent Pazeller 感谢您的更正。

标签: mysql auto-increment


【解决方案1】:

你可以像这样生成一个ID

insert into destination_table (col_id, col2, col3)
select @rank := @rank + 1, colX, colY
from source_table
cross join (select @rank := 0) r
order by some_column

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-08
    • 1970-01-01
    • 2013-01-24
    • 1970-01-01
    • 2014-10-01
    • 1970-01-01
    • 2023-03-30
    • 2020-09-12
    相关资源
    最近更新 更多