SQLite 3.45.0 发布!

SQLite 开发团队于 2024 年 01 月 18 日发布了 SQLite 3.45.0 版本,带来了一些 JSON 和优化器增强,让我们一睹为快!

JSON 函数

SQLite 3.45.0 版本开始,所有的 JSON 函数将会使用全新的内部格式存储 JSON 数据,也就是二进制的 JSONB。这种新格式可以避免查询和更新时不必要的 JSON 数据解析,而且占用的磁盘空间更小。

新版本增加了大量处理 JSONB 参数的函数,它们和原有的 JSON 函数一一对应。例如:

sql 复制代码
select json_extract('{"Name":"SQLite", "Version":"3.45.0"}', '$.Name');
SQLite

select jsonb_extract('{"Name":"SQLite", "Version":"3.45.0"}', '$.Name');
SQLite

json_valid(x, y) 函数增加了一个可选的参数 y,用于定义 JSON 格式校验的规则。该参数的取值范围如下:

  • 0x01,输入文本严格遵循 RFC-8259 JSON 规范;
  • 0x02,输入文本遵循 JSON5 扩展规范;
  • 0x04,输入文本为遵循 JSONB 外部格式的 BLOB;
  • 0x08,输入文本为严格遵循 JSONB 内部格式的 BLOB。

参数 y 的默认值为 1,也可以是以上状态掩码的组合:

  • 1,输入文本为 RFC-8259 JSON 文本;
  • 2,输入文本为 JSON5 文本;
  • 4,输入文本大概率为 JSONB;
  • 5,输入文本为 RFC-8259 JSON 文本或者 JSONB;
  • 6,输入文本为 JSON5 文本或者 JSONB;
  • 8,输入文本严格遵循 JSONB 规范;
  • 9,输入文本为 RFC-8259 JSON 文本或者严格遵循 JSONB 规范;
  • 10,输入文本为 JSON5 文本或者严格遵循 JSONB 规范。

查询优化

如果存在一个更好的等式约束(equality constraint),不允许使用传递性约束优化(transitive constraint optimization)引导查询优化器错误地使用范围约束(range constraint)。因为等式约束通常比范围约束更精确,能够更好地优化查询性能。

sql 复制代码
CREATE TABLE x(i INTEGER, j INTEGER, k INTEGER);
CREATE INDEX idx_x_ij ON x(i, j);

EXPLAIN QUERY PLAN SELECT * FROM x a JOIN x b ON b.i = a.i AND b.j = a.k WHERE a.k > 0;

-- 早期版本
QUERY PLAN
|--SCAN a
`--SEARCH b USING INDEX idx_x_ij (i=? AND j>?)

-- SQLite 3.45.0
QUERY PLAN
|--SCAN a
`--SEARCH b USING INDEX idx_x_ij (i=? AND j=?)

查询优化器可以更好地忽略那些被 ANALYZE 工具识别为低质量的索引,以提高查询性能和效率。

其他改进

新版本为应用程序 SQL 函数增加了 SQLITE_RESULT_SUBTYPE 属性,所有调用 sqlite3_result_subtype() 的应用程序 SQL 函数必须注册该属性。

新版本可以为 FTS5 虚拟表指定 Tokendata 选项,可以控制 fts5 处理分词器返回的内容。

默认启用 SQLITE_DIRECT_OVERFLOW_READ 优化选项,可以提高 BLOB 和长字符串的读取性能。如果需要禁用该选项,可以在编译时指定 -DSQLITE_DIRECT_OVERFLOW_READ=0。

参数 SQLITE_MAX_PAGE_COUNT 的默认值从 1073741824 改为 4294967294,对于默认的 4 KB 数据页,单个数据库文件最大可以到达 17.5 TB。

对于命令行客户端,自动检测 .dump 脚本的执行并设置合适的参数,例如 .dbconfig defensive off 以及 .dbconfig dqs_dll on。同时命令行还改进了 Windows 平台对于 UTF-8 内容的显示。

相关推荐
阿成学长_Cain33 分钟前
Linux ipcs 命令超全详解:查看共享内存 / 消息队列 / 信号量,IPC 运维必备
linux·运维·服务器·网络·数据库
OceanBase数据库官方博客3 小时前
OceanBase AI 时代,数据库的变与不变(技术解析与实践)
数据库·人工智能·oceanbase
阿成学长_Cain4 小时前
Linux dirs命令详解|Bash目录堆栈管理快速切换目录实战教程
linux·运维·前端·数据库
ywl4708120874 小时前
Mysql 平衡二叉树、红黑树、B树、B+树区别以及应用场景(五)
数据库·b树·mysql
IvorySQL5 小时前
IvorySQL Agent 探索与实践
数据库·人工智能·postgresql·oracle·ivorysql
SelectDB6 小时前
美团数十 PB 规模 Apache Doris 实践:从统一 OLAP 到 AI-Native 数据基座
大数据·数据库·性能优化
Database_Cool_6 小时前
阿里云RDS主从延迟解决方案_只读实例半同步复制最佳实践
数据库·人工智能
KaMeidebaby7 小时前
卡梅德生物技术快报|小 RNA 适配体合成 + 多方法亲和力表征全流程标准化操作手册
前端·网络·数据库·人工智能·算法
卓怡学长7 小时前
w269基于spring boot + vue 候鸟监测数据管理系统
java·数据库·spring boot·spring·intellij-idea
ClouGence7 小时前
MySQL 到 StarRocks 数据迁移同步:同步方案与实践指南
数据库·mysql