0

我在 python 中使用 MySQLdb 的 executemany 函数来插入多行,并进行重复更新。它就是这样工作的。但有一个问题。大多数行通常需要通过一两次插入来更新。我在该表中有一个自动编号字段。每次运行此查询时,即使实际插入的计数远低于跳转,自动编号字段也会跳转。ids基本上是浪费了。任何线索这里发生了什么以及如何避免这种情况?谢谢!!

4

1 回答 1

0

这是 MySQL 服务器如何处理自动增量字段的结果。MySQLdb 模块根本不会影响自动增量行为。

MySQL 性能博客详细解释了为什么会出现差距,以及如何使用互斥表来避免它们。简而言之:

create table mutex(
    i int not null primary key
);
insert into mutex(i) values (1);

insert into foo(name) select 1 from mutex left outer join foo on foo.name=1 where mutex.i = 1 and foo.name is null;

即插入与对互斥表执行左外连接的子选择。为什么这行得通?如果 id 已经在 mutex 表中,则重复使用;否则,连接会产生 NULL,并触发自动增量。

于 2012-09-21T18:08:13.333 回答