当前位置: 首页 > news >正文

SQLite 3.43.0 发布,又有啥新功能?

SQLite 开发团队于 2023 年 08 月 24 日发布了 SQLite 3.43.0 版本。本文给大家分析一下该版本的更新。

全文索引

SQLite 3.43.0 增加了 Contentless-Delete FTS5 索引。这是一种 FTS5 全文索引的变种,不存储被索引的内容,同时支持数据的删除操作。

例如:

CREATE VIRTUAL TABLE f1 USING fts5(a, b, c, content='', contentless_delete=1);

Contentless-delete 表与 Contentless 表的区别在于:

  • Contentless-delete 表支持 DELETE 以及 INSERT OR REPLACE INTO 语句;
  • Contentless-delete 表支持 UPDATE 语句,前提是所有用户定义的字段都指定了新的数据;
  • Contentless-delete 表不支持 FTS5 删除命令。

例如:

-- 支持以下 UPDATE 语句
UPDATE f1 SET a=?, b=?, c=? WHERE rowid=?;-- 不支持以下 UPDATE 语句,因为字段 c 没有指定新的数据
UPDATE f1 SET a=?, b=? WHERE rowid=?;

除非存在旧版本的后向兼容需求,推荐使用 Contentless-delete 表。

日期时间函数

新版本增强了日期时间相关的函数。首先是增加了“±YYYY-MM-DD HH:MM:SS.SSS”形式的时间偏移量,例如:

select date('2023-01-01', '+1000-01-01');
3023-02-02

其次,新版本增加了 timediff(A, B) 函数,计算从时间 B 到达时间 A 所需的时间。例如:

select timediff('2023-06-01', '2023-01-01');
+0000-05-00 00:00:00.000

timediff() 函数返回的格式是字符串,方便阅读。如果想要返回精确的时间差(天数、秒数等),可以使用两个 julianday() 或 unixepoch() 函数相减。

字符串函数

SQLite 3.43.0 增加了一个 octet_length(X) 字符串函数,用于返回字符串 X 占用的字节数。例如:

select octet_length('Hello');
5select octet_length('你好');
6

octet_length(X) 以字节为单位,而不是字符为单位。因此,不同数据库字符集可能返回不同的长度。

C 语言接口

SQLite 3.43.0 新增了一个 sqlite3_stmt_explain(S,E) API,用于改变预编译语句的 EXPLAIN 设置。

如果参数 E 设置为 0,S 就是一个普通的预编译语句;如果 E 设置为 1,S 就变成一个以 EXPLAIN 开始的 SQL 语句;如果E 设置为 2,S 就变成一个以 EXPLAIN QUERY PLAN 开始的 SQL 语句。

查询优化

查询优化器增强包括:

  • LEFT JOIN 强度削减优化扩展至 RIGHT JOIN 以及 FULL JOIN,并且重命名为 OUTER JOIN 强度消减优化。
  • 改进了 OUTER JOIN 强度消减优化使用的理论证明器,减少了假阴性的情况。

Decimal 扩展

新版本增强了与 decimal 扩展相关的内容:

  • 新增函数 decimal_pow2(N),返回 2.0 的 N 次方,N 为 -2000 到 +2000 之间的整数;
  • 新增函数 decimal_exp(X),以科学计数法形式(e+NN)返回 X 的十进制数字;
  • 对于浮点数 X,decimal(X) 函数将会返回完全扩展的精确数字。

例如:

select decimal_pow2(10);
+1.024e+03select decimal_exp(12.3);
+1.2300000000000000710542735760100185871124267578125e+01select decimal(12.3);
12.300000000000000710542735760100185871124267578125

JSON 性能

某些情况下,对于大型 JSON 字符串的处理性能获得翻倍提升。

http://www.lryc.cn/news/154618.html

相关文章:

  • 百度自研高性能ANN检索引擎,开源了
  • golang遍历map的方法
  • 如何让Android平台像网络摄像机一样实现GB28181前端设备接入?
  • 文盘Rust -- 生命周期问题引发的 static hashmap 锁 | 京东云技术团队
  • SpringMVC入门篇
  • 面经:安卓学习笔记
  • Java设计模式:四、行为型模式-06:观察者模式
  • vscode中讨厌的蓝色波浪线的去除小trick和原理
  • 开发工具——IDE安装 / IDEA子module依赖导入失败编译提示xx找不到符号 / IDEA在Git提交时卡顿
  • AcWing 787:归并排序
  • SeamlessM4T—Massively Multilingual Multimodal Machine Translation
  • Python数据分析-Numpy
  • 【真题解析】系统集成项目管理工程师 2023 年上半年真题卷(案例分析)
  • 【GAMES202】Real-Time Global Illumination(in 3D)—实时全局光照(3D空间)
  • 金蝶云星空二开,公有云执行SQL
  • JAVA String 二维的字符串数组 String[][]
  • 【Unity3D赛车游戏优化篇】【九】Unity中如何让汽车丝滑漂移?
  • el-dialog设置高度、使用resetFields清除表单项无效问题
  • MySql切换到达梦数据库,各种问题解决记录
  • 2023开学礼山东财经大学《乡村振兴战略下传统村落文化旅游设计》许少辉新财经图书馆
  • vscode中使用eslint+prettier的配置
  • HTML 标签讲解
  • ue5 小知识点 ue的world type,pie editor game
  • 两表union 如何保证group by 字段唯一
  • 【⑰MySQL】 变量 | 循环 | 游标 | 处理程序
  • 如何在arXiv上发表一篇文章
  • 重要性采样
  • 说说Omega架构
  • 高忆管理:光刻胶概念强势拉升,同益股份、格林达涨停
  • 计算机图形学线性代数相关概念