SQLite 使用AUTOINCREMENT带来的利弊

在项目使用中我们常常需要一个自动增长的主键,比如加上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
时间: 2024-10-09 20:30:58

SQLite 使用AUTOINCREMENT带来的利弊的相关文章

SQLite XXTea加密学习

这几天优化数据库读写,移植了xxtea加密到最新的数据库sqlite 3.12.2里,一些好文章放在这里.移植后,数据库读写性能异常优秀! 这几天又发现,数据库还是发生了无法写入情况,数据库崩溃掉了.所以,估计想兼容以前数据库是很困难的了.. 十分推荐他的博客:SQLite学习笔记(十)&&加密    Sqlite学习笔记(一)&&编译安装 sqlite3.6.18加密模块change(讨论) sqlite3 加解密 SQLITE3 加密总结 sqlite3+使用总结 SQ

Sqlite 基本概念及使用概述

SQLite 是一个开源的嵌入式关系型数据库,是一个自给自足的.无服务器的.零配置的.事务性的 SQL 数据库引擎.SQLite 具有如下特点: 无需单独的服务器进程,是无服务器的 不需要配置,无需复杂的安装或管理步骤 数据库存储在一个单一的跨平台的磁盘文件中 非常小的,轻量级的 自给自足的,不需要任何外部的依赖 事务是完全兼容 ACID,允许从多个进程或线程安全访问 支持 SQL92(SQL2)标准的大多数查询语言的功能 使用 ANSI-C 编写的,并提供了简单易用 API 兼容类 UNIX

Android SQLite (五 ) 全面详解(三)

SQLite约束 约束是在表的数据列上强制执行的规则.这些是用来限制可以插入到表中的数据类型.这确保了数据库中数据的准确性和可靠性.约束可以是列级或表级.列级约束仅适用于列,表级约束被应用到整个表. 以下是在SQLite中常用的约束: NOT NULL约束:确保某列不能有NULL值. DEFAULT约束:当某列没有指定值时,为该列提供默认值. UNIQUE约束:确保某列中的所有值是不同的. PRIMARY Key约束:唯一标识数据库表中的各行/记录. CHECK约束:CHECK约束确保某列中的所

SQLite和MySQL数据库的差别与应用

简单来说,SQLITE功能简约.小型化,追求最大磁盘效率:MYSQL功能全面,综合化.追求最大并发效率.假设仅仅是单机上用的,数据量不是非常大.须要方便移植或者须要频繁读/写磁盘文件的话.就用SQLite比較合适:假设是要满足多用户同一时候訪问.或者是站点訪问量比較大是使用MYSQL比較合适. 以下具体介绍两者的差别和应用: SQLite SQLite是非凡的数据库,他能够进程在使用它的应用中.作为一个自包括.基于文件的数据库,SQLite提供了出色的工具集,能够处理全部类型的数据,没有什么限制

[QT][SQL]sql学习记录5_sqlite Autoincrement(自动递增)

定义以及示例请见 : http://www.runoob.com/sqlite/sqlite-autoincrement.html SQLite Autoincrement(自动递增) SQLite 的 AUTOINCREMENT 是一个关键字,用于表中的字段值自动递增.我们可以在创建表时在特定的列名称上使用 AUTOINCREMENT 关键字实现该字段值的自动增加. 关键字 AUTOINCREMENT 只能用于整型(INTEGER)字段. 实例 假设要创建的 COMPANY 表如下所示: sq

Sqlite全面学习(三)

PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! [工匠若水 http://blog.csdn.net/yanbober] 本篇继续接上一篇,阅读上一篇<Sqlite全面学习(二)> SQLite约束 约束是在表的数据列上强制执行的规则.这些是用来限制可以插入到表中的数据类型.这确保了数据库中数据的准确性和可靠性.约束可以是列级或表级.列级约束仅适用于列,表级约束被应用到整个表. 以下是在SQLite中常用的约

微信6.1附近餐馆“携用户以令商家”?

微信最新发布的6.1版本在搜索功能的提升上,增添了搜索附近餐馆这个功能,让不少餐饮企业洞察到了其对O2O市场的布局,看到了传统餐饮可以通过微信这个第三方平台,实现餐饮企业线上和线下的连接.但是,诸君在为此摩拳擦掌之时,是否看到了这是一把双刃剑带来的利弊?重蹈大平台的覆辙,携用户以令商家首先,微信这次的新功能将采取什么样的入驻模式我们不得而知,它是否会利用自身庞大的用户群体,反过来要挟商家,让商家重蹈在团购平台中的覆辙,这也值得深思.餐饮企业让出了利益,却是“为他人做了嫁衣”,就算再庞大的客户资源

手游冷热不均 产业结构加速升级的背后

无论什么行业,要想有一个健康.可持续发展的良性生态系统,就必须形成特定的均衡态势.以农业为例,农作物要想健康成长,就必须避免大风暴雨的特定灾害,更不能出现冷热交替出现的非正常气候.但就目前来看,在近年呈现蓬勃发展的手游市场,就出现冷热不均的奇葩现象. 这一现象的出现,与手游行业产业结构加速升级有着直接联系,手游品类呈现多极化趋势.与此同时,巨头的垄断因素也不可小觑,结果就是让中小开发团队在寒风下瑟瑟发抖.对于手游行业来说,冷热不均的结果有利有弊,就看接下来的自我调整了. 手游品类分冷热 多极化导

Ajax: A New Approach to Web Applications

Ajax: 开发web应用的新方法 by Jesse James Garrett February 18, 2005 原文网址:http://adaptivepath.com/ideas/essays/archives/000385.php 阅读这篇首创 Ajax 这个术语的文章.这是所有 Ajax 开发人员的必读文章. —————————————————————————————————————————————————— If anything about current interaction