加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

SQLite 使用AUTOINCREMENT带来的利弊

发布时间:2020-12-12 19:51:59 所属栏目:百科 来源:网络整理
导读:在项目使用中我们常常需要一个自动增长的主键,比如加上AUTOINCREMENT约束使一个主键在每次插入数据时增长。由于一般而言你建立一个表会默认有一个成为ROWID的字段(除非声明为 without rowid),所以你添加的integer primary key其实就是rowid的别名而已,

在项目使用中我们常常需要一个自动增长的主键,比如加上AUTOINCREMENT约束使一个主键在每次插入数据时增长。由于一般而言你建立一个表会默认有一个成为ROWID的字段(除非声明为 without rowid),所以你添加的integer primary key其实就是rowid的别名而已,但是如果你加了autoincrement的约束以后,数据库引擎生成rowid的算法会发生相应的改变。

他们的生成算法如下

integer primary key:

获取当前column最大的值,如果没有达到64位有符号整数最大值,那么就在最大值的基础上+1作为新值 ,如果已经达到了最大值,那么就重新随机寻找一个未使用的,就是你删除一行的时候未用的那个值。如果真的已经没有可以插入了,那么就返回SQLITE_FULL错误。

integer primary key autoincrement:

获取当前column最大值,如果没达到最大值,增1插入,否则返回SQLITE_FULL。

integer primary key默认也是会自动增加的,使用autoincrement能够保证新插入的数据一定会比以前的大,但是也带来了许多额外的消耗,会消耗额外的CPU,磁盘空间,还有I/O磁盘操作带来的开销。官网给出的建议是:如果没有严格的需要它应当被避免使用,通常它不是必要的。


下面是我测试的一些数据:

insert操作
关闭事物处理
100W数据 not autoincrement 74.7088160515 s
100W数据 autoincrement  91.2676999569 s
开启事物处理
100W数据 not autoincrement 69.6123759747 s
100W数据 autoincrement 86.1955218315 s

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读