我在python中使用MySQLdb的executemany函数来插入mutliple行,重复更新。它就是这样的。但有一个问题。大多数行通常需要更新,发生一次或两次插入。我在该表中有一个自动编号字段。每次运行此查询时,即使实际插入的计数低于跳转,自动编号字段也会跳转。 ids基本上是浪费了。 有什么线索在这里发生了什么以及如何避免这种情况? 谢谢!
答案 0 :(得分:0)
这是MySQL服务器处理自动增量字段的结果。 MySQLdb模块根本不会影响自动增量行为。
MySQL Performance Blog详细解释了为什么会出现差距,以及如何使用mutex table来避免这些差距。简而言之:
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已经在互斥表中,则重用;否则,连接会产生NULL,并触发自动增量。