【问题标题】:MySQL, C++ - Programmatically, How does MySQL Autoincrement Work?MySQL,C++ - 以编程方式,MySQL 自动增量如何工作?
【发布时间】:2011-12-22 19:31:55
【问题描述】:

从 MySQL 的最新源代码(不确定是 C 还是 C++),它是如何进行自动增量的?我的意思是,它是否像元数据资源一样存储在上次停止的表上,还是必须进行表扫描才能找到表中使用的最大 ID?另外,当您查看自动增量与 PostgreSQL 的实现方式相比时,您是否发现使用自动增量的任何负面影响?

【问题讨论】:

  • 您使用的是哪个引擎? (例如 InnoDB)

标签: c++ mysql c architecture auto-increment


【解决方案1】:

这取决于数据库使用的引擎。 InnoDB 将最大值存储在内存中而不是磁盘上。非常有效率。我猜大多数引擎都会做类似的事情,但不能保证。

InnoDB's Auto Increment 将在加载 DB 时运行一次以下查询并将变量存储在内存中:

 SELECT MAX(ai_col) FROM t FOR UPDATE;

PostgreSQL 完全没有 auto_increment 相比,这取决于您将如何自己实现该字段。 (至少上次我使用它时它缺少它。他们可能已经改变了)大多数人会创建一个SEQUENCE。这似乎存储在内存中的伪表中。我认为 InnoDBs 是一种更简单更好的方法。如果它们不相等,我猜 InnoDB 会更有效率。

【讨论】:

  • 好的,所以我想我是用 InnoDB 读到的,当数据库加载时,它会寻找最后一个序列,然后将其作为表元数据的一部分缓存在虚拟内存中。谢谢。
猜你喜欢
  • 2011-06-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-21
  • 2016-04-03
  • 2012-04-02
  • 2012-12-14
相关资源
最近更新 更多