mysql 自增值申请策略
自增值申请策略
能否先查ID,再查入数据?
不能,如果每次插入前,都要在主键的索引树上查询要插入的id是否存在,会大大降低插入插入的效率。
能否等事务完成后,再释放自增值的锁?
不能,如果需要等待当前事务完成,其它事务先能获取自增值的锁,就会大大降低并发。
innodb_autoinc_lock_mode
MySQL通过参数innodb_autoinc_lock_mode
,来设置自值锁的行为,默认值为1
0值 :等事务完成才释放锁
1值 :
- 对于普通的
insert into table
,申请到自增锁后就释放,不用等插入语句的完成。 - 对于批量插入,类似
insert ... select
,一直持有自增锁,直到事务执行完成。这样也保证了id的连续性。
- 对于普通的
2值:所有插入操作在申请到自增锁后就释放,包括
insert ... select
这种