SQLite 3.48.0 发布,有哪些更新?

SQLite 开发团队于 2025 年 1 月 14 日发布了 SQLite 3.48.0 版本,我们来解读一下新版本的改进功能。

EXPLAIN QUERY PLAN

SQLite 使用 EXPLAIN QUERY PLAN 命令获取查询语句的执行计划,新版本改进了执行计划输出结果中的覆盖索引优化信息:

sql 复制代码
sqlite> create table t1(id int, name text, price int, desc text);
sqlite> create index idx_t1_np on t1(name, price);
sqlite> explain query plan select name, price from t1 where name = 'apple';
QUERY PLAN
`--SEARCH t1 USING COVERING INDEX idx_t1_np (name=?)

iif 函数

iif(X,Y,Z) 函数在 X 参数为真时返回 Y 的值,否则返回 Z 的值。

SQLite 3.48.0 支持忽略参数 Z,相当于指定了 NULL。例如:

sql 复制代码
sqlite> select iif(1=1, 'Y', 'N');
Y
sqlite> select iif(1=2, 'Y', 'N');
N
sqlite> select iif(1=2, 'Y');

sqlite> select if(1=2, 'Y', 'N');
N

命令行工具

SQLite 3.48.0 版本命令行工具增加了一个新的命令 .dbtotxt,用于导出数据库的十六进制内容:

sql 复制代码
sqlite> .dbtotxt
| size 12288 pagesize 4096 filename unk.db
| page 1 offset 4096
|      0: 53 51 4c 69 74 65 20 66 6f 72 6d 61 74 20 33 00   SQLite format 3.
|     16: 10 00 01 01 00 40 20 20 00 00 00 00 00 00 00 03   .....@  ........
|     32: 00 00 00 00 00 00 00 00 00 00 00 04 00 00 00 04   ................
|     48: 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00   ................
|     96: 00 00 00 00 0d 00 00 00 02 0f 74 00 0f b6 0f 74   ..........t....t
|   3952: 00 00 00 00 40 02 06 17 1f 11 01 5f 69 6e 64 65   ....@......_inde
|   3968: 78 69 64 78 5f 74 31 5f 6e 70 74 31 03 43 52 45   xidx_t1_npt1.CRE
|   3984: 41 54 45 20 49 4e 44 45 58 20 69 64 78 5f 74 31   ATE INDEX idx_t1
|   4000: 5f 6e 70 20 6f 6e 20 74 31 28 6e 61 6d 65 2c 20   _np on t1(name,
|   4016: 70 72 69 63 65 29 48 01 06 17 11 11 01 7d 74 61   price)H.......ta
|   4032: 62 6c 65 74 31 74 31 02 43 52 45 41 54 45 20 54   blet1t1.CREATE T
|   4048: 41 42 4c 45 20 74 31 28 69 64 20 69 6e 74 2c 20   ABLE t1(id int,
|   4064: 6e 61 6d 65 20 74 65 78 74 2c 20 70 72 69 63 65   name text, price
|   4080: 20 69 6e 74 2c 20 64 65 73 63 20 74 65 78 74 29    int, desc text)
| page 2 offset 8192
|      0: 0d 00 00 00 00 10 00 00 00 00 00 00 00 00 00 00   ................
| page 3 offset 12288
|      0: 0a 00 00 00 00 10 00 00 00 00 00 00 00 00 00 00   ................
| end unk.db

这个命令通常用于 SQLite 内核开发和测试。

C 语言接口

新版本还更新了一些 C 语言 API,包括:

  • sqlite3_io_methods 对象的 xDeviceCharacteristics 方法增加了 SQLITE_IOCAP_SUBPAGE_READ 属性,支持非整页读取数据库文件;
  • sqlite3_prepare_v3 接口增加了 SQLITE_PREPARE_DONT_LOG 选项,可以避免 SQL 编译错误发送到全局错误日志文件,方便调试;
  • xFileControl 方法增加了 SQLITE_FCNTL_NULL_IO 操作码,用于设置 sqlite3_file 对象不再读写数据库文件。

其他更新

新版本重构了从源码构建 SQLite 运行库的配置脚本,修复了缺陷、改进了性能、增加了可维护性。

运行时参数 SQLITE_LIMIT_LENGTH 的最小值从 1 增加到 30。

扩展了 FTS5 辅助接口 xInstToken(),支持通过 insttoken 配置选项或者 SQL 函数 fts5_insttoken() 执行前缀搜索。

SQL 函数最大参数个数从 127 增加到 1000。

清除了 SQLITE_USER_AUTHENTICATION 相关代码。

修复了一些代码缺陷。

相关推荐
陌上丨8 小时前
Redis的Key和Value的设计原则有哪些?
数据库·redis·缓存
AI_56788 小时前
AWS EC2新手入门:6步带你从零启动实例
大数据·数据库·人工智能·机器学习·aws
ccecw8 小时前
Mysql ONLY_FULL_GROUP_BY模式详解、group by非查询字段报错
数据库·mysql
JH30738 小时前
达梦数据库与MySQL的核心差异解析:从特性到实践
数据库·mysql
数据知道9 小时前
PostgreSQL 核心原理:如何利用多核 CPU 加速大数据量扫描(并行查询)
数据库·postgresql
麦聪聊数据10 小时前
Web 原生架构如何重塑企业级数据库协作流?
数据库·sql·低代码·架构
未来之窗软件服务10 小时前
数据库优化提速(四)新加坡房产系统开发数据库表结构—仙盟创梦IDE
数据库·数据库优化·计算机软考
Goat恶霸詹姆斯11 小时前
mysql常用语句
数据库·mysql·oracle
大模型玩家七七12 小时前
梯度累积真的省显存吗?它换走的是什么成本
java·javascript·数据库·人工智能·深度学习
曾经的三心草12 小时前
redis-9-哨兵
数据库·redis·bootstrap