【问题标题】:Is it useful to set an INDEX on an AUTO_INCREMENT column?在 AUTO_INCREMENT 列上设置 INDEX 有用吗?
【发布时间】:2018-11-24 09:41:34
【问题描述】:

AUTO_INCREMENT PRIMARY KEY 已经按数字顺序排列,所以查询,至少在我对数据库的基本理解中,会从一开始就实现binary search,那么在这样的列上设置索引有什么用?如果整数是半随机顺序的,我理解它的用途,但我在AUTO_INCREMENT 列上看不到重点。

【问题讨论】:

  • 有用吗? MySQL 强制您在 AUTO_INCREMENT 选项上添加一个键 (INDEX)。如果您不这样做,您将收到错误“错误:ER_WRONG_AUTO_KEY:不正确的表定义;只能有一个自动列并且必须将其定义为键”

标签: mysql indexing mariadb binary-search


【解决方案1】:

无需为 PRIMARY KEY 创建另一个索引。

在 InnoDB 中,PRIMARY KEY 也称为聚集索引。这意味着整个表本身存储为 B 树,按为表的主键定义的列排序。

这实际上与 AUTO_INCREMENT 列存储递增数字这一事实无关。即使您不使用AUTO_INCREMENT,并且您以随机顺序插入行,它们也会以升序插入到聚集索引中。

【讨论】:

  • 另外,在使用 InnoDB 引擎时,始终创建自己的主键/唯一键非常重要...发布我的 dba.stackexchange.com/questions/48072/… 解释原因
  • @RaymondNijland,当然这是一个很好的做法,但我认为 OP 已经定义了一个主键。除了现有的主键之外,他们询问是否需要在相同的列上定义索引。
猜你喜欢
  • 1970-01-01
  • 2011-02-25
  • 1970-01-01
  • 2012-07-02
  • 1970-01-01
  • 2019-06-20
  • 1970-01-01
  • 1970-01-01
  • 2021-04-11
相关资源
最近更新 更多