哪個(gè)網(wǎng)站能買到做披薩的芝士正宗中小企業(yè)網(wǎng)站
SQLite 開發(fā)團(tuán)隊(duì)于 2023 年 11 月 01 日發(fā)布了 SQLite 3.44.0 版本,帶來了一些 SQL 和優(yōu)化器增強(qiáng),本文給大家做一個(gè)簡要分分析。
新增 concat() 函數(shù)
新版本增加了兩個(gè)連接字符串的函數(shù):concat() 以及 concat_ws()。它們可以兼容 PostgreSQL、SQLServer 以及 MySQL,例如:
sqlite> select concat('sql', 'ite');
sqlite
sqlite> select concat_ws('-','S', 'Q', 'L');
S-Q-L
新增 string_agg() 函數(shù)
SQLite 提供了實(shí)現(xiàn)字符串聚合的 group_concat 函數(shù),新版本為其增加了一個(gè)別名函數(shù) string_agg(),目的是為了兼容 PostgreSQL 以及 SQL Server 語法。例如:
sqlite> create table test(pid int, val text);
sqlite> insert into test values(1, 'S'),(1,'Q'),(1,'L');
sqlite> select pid, string_agg(val,'-')...> from test...> group by pid;
1|S-Q-L
聚合函數(shù) ORDER BY 子句
新版本支持在聚合函數(shù)中使用 ORDER BY 子句,指定數(shù)據(jù)在聚合函數(shù)中處理的順序。這個(gè)參數(shù)對(duì)于某些聚合函數(shù)沒有實(shí)際意義,例如 max();但是對(duì)于某些聚合函數(shù),比如 string_agg() 以及 json_group_array(),該參數(shù)將會(huì)影響最終的結(jié)果。例如:
sqlite> select pid, string_agg(val,'-' order by val)...> from test...> group by pid;
1|L-Q-S
strftime() 新增參數(shù)
strftime() 函數(shù)增加了以下格式參數(shù):
- %e,返回月份中的第幾天:0-31;
- %F,ISO-8601 格式日期:YYYY-MM-DD;
- %I,12小時(shí)制對(duì)應(yīng)的小時(shí):01-12;
- %k,24 小時(shí)制對(duì)應(yīng)的小時(shí):0-24;
- %l,12小時(shí)制對(duì)應(yīng)的小時(shí):1-12;
- %p,代表上午和下午的“AM”和“PM”;
- %P,代表上午和下午的“am”和“pm”;
- %R,ISO-8601 格式時(shí)間:HH:MM;
- %T,ISO-8601 格式時(shí)間:HH:MM:SS;
- %u,一周中的第幾天,1 代表星期一。
查詢優(yōu)化器
對(duì)于部分索引掃描,如果 WHERE 子句包含一個(gè)字段的常量值,那么可以用該常量替換該字段。這種優(yōu)化增加了部分索引成為覆蓋索引的可能性。
禁用了 3.42.0 版本增加的視圖掃描優(yōu)化,因?yàn)樗鼘?dǎo)致了成倍的性能下降。
其他改進(jìn)
新增了兩個(gè) C 語言 API:sqlite3_get_clientdata() 以及 sqlite3_set_clientdata()。
CREATE TABLE 語句相關(guān)的許多錯(cuò)誤在創(chuàng)建表時(shí)立即拋出,而不是等到該表第一次被訪問時(shí)拋出。
PRAGMA integrity_check 命令使用新的 xIntegrity 方法驗(yàn)證各種內(nèi)置虛擬表的內(nèi)容一致性。該功能支持 FTS3、FTS4、FTS5、RTREE 以及 GEOPOLY 插件。
配置選項(xiàng) SQLITE_DBCONFIG_DEFENSIVE 將會(huì)阻止啟用 PRAGMA writable_schema 選項(xiàng)。在之前的版本中,writable_schema 可以被啟用,但是不會(huì)實(shí)際生效。
內(nèi)置 FTS3、FTS4、FTS5、RTREE 以及 GEOPOLY 虛擬表被設(shè)置為 SQLITE_VTAB_INNOCUOUS,因此它們可以在高安全部署環(huán)境中被用于觸發(fā)器。
棄用 PRAGMA case_sensitive_like 語句,因?yàn)楫?dāng)模式包含 LIKE 操作符時(shí)會(huì)導(dǎo)致數(shù)據(jù)庫被 PRAGMA integrity_check 損壞的報(bào)告。
當(dāng)使用 Microsoft C 編譯器時(shí),默認(rèn)啟用 SQLITE_USE_SEH(結(jié)構(gòu)化異常處理)。該選項(xiàng)可以使用 -DSQLITE_USE_SEH=0 禁用。
SQLite 在運(yùn)行時(shí)檢查底層硬件是否支持精度大于“double”的“l(fā)ong double”類型,并且基于檢查結(jié)果使用相應(yīng)的浮點(diǎn)數(shù)程序。
如果系統(tǒng)支持,Windows 命令行接口(CLI)默認(rèn)使用 UTF-8 編碼進(jìn)行輸入輸出。使用 --no-utf8 選項(xiàng)啟動(dòng)可以禁用 UTF8 支持。