深圳网站网页制作公司,河南建设工程信息网官网首页,无锡建设网站制作,成都模板网站建设服务SQLite 开发团队于 2024 年 01 月 18 日发布了 SQLite 3.45.0 版本#xff0c;带来了一些 JSON 和优化器增强#xff0c;让我们一睹为快#xff01;
JSON 函数
SQLite 3.45.0 版本开始#xff0c;所有的 JSON 函数将会使用全新的内部格式存储 JSON 数据#xff0c;也就是…SQLite 开发团队于 2024 年 01 月 18 日发布了 SQLite 3.45.0 版本带来了一些 JSON 和优化器增强让我们一睹为快
JSON 函数
SQLite 3.45.0 版本开始所有的 JSON 函数将会使用全新的内部格式存储 JSON 数据也就是二进制的 JSONB。这种新格式可以避免查询和更新时不必要的 JSON 数据解析而且占用的磁盘空间更小。
新版本增加了大量处理 JSONB 参数的函数它们和原有的 JSON 函数一一对应。例如
select json_extract({Name:SQLite, Version:3.45.0}, $.Name);
SQLiteselect jsonb_extract({Name:SQLite, Version:3.45.0}, $.Name);
SQLitejson_valid(x, y) 函数增加了一个可选的参数 y用于定义 JSON 格式校验的规则。该参数的取值范围如下
0x01输入文本严格遵循 RFC-8259 JSON 规范0x02输入文本遵循 JSON5 扩展规范0x04输入文本为遵循 JSONB 外部格式的 BLOB0x08输入文本为严格遵循 JSONB 内部格式的 BLOB。
参数 y 的默认值为 1也可以是以上状态掩码的组合
1输入文本为 RFC-8259 JSON 文本2输入文本为 JSON5 文本4输入文本大概率为 JSONB5输入文本为 RFC-8259 JSON 文本或者 JSONB6输入文本为 JSON5 文本或者 JSONB8输入文本严格遵循 JSONB 规范9输入文本为 RFC-8259 JSON 文本或者严格遵循 JSONB 规范10输入文本为 JSON5 文本或者严格遵循 JSONB 规范。
查询优化
如果存在一个更好的等式约束equality constraint不允许使用传递性约束优化transitive constraint optimization引导查询优化器错误地使用范围约束range constraint。因为等式约束通常比范围约束更精确能够更好地优化查询性能。
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_READ0。
参数 SQLITE_MAX_PAGE_COUNT 的默认值从 1073741824 改为 4294967294对于默认的 4 KB 数据页单个数据库文件最大可以到达 17.5 TB。
对于命令行客户端自动检测 .dump 脚本的执行并设置合适的参数例如 .dbconfig defensive off 以及 .dbconfig dqs_dll on。同时命令行还改进了 Windows 平台对于 UTF-8 内容的显示。