博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQLite 使用AUTOINCREMENT带来的利弊
阅读量:6034 次
发布时间:2019-06-20

本文共 820 字,大约阅读时间需要 2 分钟。

hot3.png

  在项目使用中我们常常需要一个自动增长的主键,比如加上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 s100W数据 autoincrement  91.2676999569 s开启事物处理100W数据 not autoincrement 69.6123759747 s100W数据 autoincrement 86.1955218315 s

转载于:https://my.oschina.net/000quanwei/blog/355645

你可能感兴趣的文章
Dubbo OPS工具——dubbo-admin & dubbo-monitor
查看>>
如何将OpenCV中的Mat类绑定为OpenGL中的纹理
查看>>
CutyCapt
查看>>
Dungeon Master ZOJ 1940【优先队列+广搜】
查看>>
解决https://localhost:1158/em 页面无法打开的问题
查看>>
[Cocoa]深入浅出Cocoa之Core Data(4)- 使用绑定
查看>>
原理:什么是Quadtrees?(转)
查看>>
记:返回方法参数的值(或多个值),
查看>>
Effective C++ 的52个条款列表
查看>>
c#读取ini文件
查看>>
一阶微分方程的求解
查看>>
其它 Helper
查看>>
监控利器Prometheus初探
查看>>
foreach遍历打印表格
查看>>
Oracle笔记(中) 多表查询
查看>>
Delphi 中的 XMLDocument 类详解(5) - 获取元素内容
查看>>
差异分析定位Ring 3保护模块
查看>>
2013年7月12日“修复 Migration 测试发现的 Bug”
查看>>
vim文本编辑器详解
查看>>
学习vue中遇到的报错,特此记录下来
查看>>