据说 数据库文件最大支持 281 T

每个数据库由一个或多个数据页组成,一个数据库内的所有数据页大小都相同,但是不同的数据库可以使用不同的数据页大小,范围从 512 到 65536 字节。

从 sqlite 3.33.0 开始,一个数据库文件最多使用 4294967294 个数据页(由 max_page_count 编译指令决定),意味着最大支持约 2.8e+14 字节(281 TB)

20亿行实践sqlite性能测试记录:

硬盘: 旧机械硬盘

表结构: 共4个字段

CREATE TABLE 测试 ( 
    id   INTEGER PRIMARY KEY AUTOINCREMENT,
    字段a CHAR    UNIQUE,
    字段b   CHAR,
    字段c INT 
);

第一次 插入了2亿数据 没有计时 

第二次 再次插入2亿条数据时  耗时 40多分钟  平均每秒插入8万条左右

第三次 再次插入4亿数据  耗时 4737.079秒  平均每秒也是8.4万条左右,此时文件大小 53.1 GB  表内总行数 8.1亿 行

第四次 再次插入6亿数据   耗时:6400.066秒 平均每秒9.3万条  此时文件大小93.7 GB   表内行数14.1亿行

第五次 再插入6亿数据 耗时:6499.033秒  平均每秒9.3万条 此时文件大小 134 GB  表内行数20.1亿

(可能是第四次因为刚好硬盘要满了 换了块硬盘的原因 插入竟然越来越快了。虽然换了块硬盘,但是也是十年前的老机械硬盘)

image.png

image.png

按id查 和 order by id 都正常

执行 select * from 性能测试 where 字段a='xxxx'  耗时70-140毫秒左右, 查询前1亿行的数据 和 8亿行以后的数据 差距不是很大

执行 select * from 性能测试 where 字段b='xxxx'  直接卡死 无法查询

执行 select * from [性能测试] limit 10000000,5000  耗时2000毫秒

执行 select * from [性能测试] limit 20000000,5000  耗时4000毫秒

执行 select * from [性能测试] where id>200000000 limit 0,100 耗时 250毫秒

执行 select * from [性能测试] where id in (1400000000,1300000000,1200000000) 耗时15毫秒

执行 select * from [性能测试] where id>2000000000 and id<2000005000 耗时78毫秒  (说明分批维护是没问题的)


此时 再 执行给字段b增加索引的语句 也是直接卡死  等了半天没反应~~

多线程读取测试 内部sql语句:select * from 性能测试 where 字段a='xxxx'

读取测试,单线程查询 

image.png

10个线程

image.png

100个线程:

image.png

实验证明  虽然多线程  读取数据没有乱  但是速度却慢下来了    说明即使多线程读取  它内部应该也是一个线程一个线程读取的



相关推荐

mysql sqlite取表内最大id语句 插入id 取表行数

取最大ID方法一:select MAX(id) from 表名 方法二:select * from sqlite_sequence where name='表名' 以上两种方法 500

sqlite mysql 复制行数据:插入查询结果 insert select 联合使用语句

插入一个字段:insert into 表名称 (字段名) select 字段名 from 表名称 where id=39

mysqltinynt,smallint ,int,bigint数据类型取值范围最大能取多少?

数据类型占用空间取值范围(有符号)取值范围(无符号)小整数型tinynt1字节-128~1270~255大整数型smallint2字节-32768~327670~65535大整数型MEDIUMINT3

php查看mysql 行数 表自增id 数据最大id

查看自增id $sql="select Auto_increment from information_schema.tables where TABLE_SCHEMA='{$数据库

sqlite查询列出某字段有重复数据

sqlite3 查询列出 指定字段有重复的行数据select * from 表名称 WHERE (字段名) IN (SELECT 字段名 FROM 表名称 GROUP BY 字段名 HAVING

mysql sqlite 删除旧数据 只保留新的100

完整语句:delete from _sql执行记录 where id in (select id from _sql执行记录 order by id desc limit 100,100000)del

mysql最大行数限制

以下内容仅是猜测:一般习惯每建一个表 第一个字段都是id,且是自增的所以感觉可能会取决于自增id的数据类型一般自增id都用int 默认就是20多亿行 如果加了 unsigned 就是40多亿行 超过

zblog mysql数据库访问速度优化 100万篇章秒开不卡 php版

zblog php数据库访问速度优化后,一百万篇文章秒开不卡.(实际上再加一百万也没问题,懒得测试了)最新编辑:升级后 最新测试 300万毫无压力! 并且已全面支持各种主题!详细请看 https://

sqlite创建索引语句 添加索引 增加索引

mysql创建索引alter table 表名 add index 索引名 (列名);sqlite创建索引:CREATE INDEX 索引名 ON 表名 (字段a,字段b);

sqlite索引不区分小写 COllAte NOCAse

一直以为如果查询不加order by 就会默认按照自增id顺序排列呢 偶然发现不加order by id的顺序竟然不是顺序的.经过了解发现原来跟索引的创建方式也有关系,创建索引时,以下选项会影响结果的