MySQL,C++编程,MySQL自增主键如何工作?

7

从MySQL的最新源代码(不确定是C还是C ++)中,它如何实现自动递增?我的意思是,它是否高效地存储一个元数据资源在表格上,记录它上次留下的位置,还是必须扫描整个表来查找正在使用的最大ID?此外,当您查看自动递增的实现方式与PostgreSQL等其他方式时,是否看到任何负面影响?


你正在使用哪个引擎?(例如InnoDB) - Joe McGrath
1个回答

2
这将取决于数据库使用的引擎。InnoDB 将最大值存储在内存中而不是磁盘上,非常高效。我猜大多数引擎会做类似的事情,但无法保证。 InnoDB 的自动增量 会在加载数据库时运行下面的查询,并将变量存储在内存中:
 SELECT MAX(ai_col) FROM t FOR UPDATE;

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

好的,我认为我读到了使用InnoDB时,当数据库加载时,它会进行查找以找到最后一个序列,然后将其作为表的元数据之一缓存在虚拟内存中。谢谢。 - Volomike

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接