MariaDB 11.1.0 预览版现已推出


MariaDB 11.1.0 预览版现已推出。值得注意的是,预览版旨在更快地将功能交到用户手中,不应用于生产。预览版中的功能可能不会全部发布为普遍可用 (GA) 版本,只有那些通过测试的功能才会合并到 MariaDB Server 11.1.1 中。

11.1 正在考虑的功能包括:

YEAR 和 DATE 的索引用法

使用 MDEV-8320 时,一些使用 DATE 或 YEAR 函数的查询会快得多,因为优化器现在可以在某些情况下使用索引。采用以下方法(从创建包含 1000 个日期的表 t3 开始)。

 create table t0(a int); insert into t0 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9); create table t1(a int); insert into t1 select A.a + B.a* 10 from t0 A, t0 B; create table t2 (pk int primary key, a datetime, b date, key(a), key(b)); insert into t2 select A.a*10+B.a, date_add(date_add('2017-01-01', interval A.a*8 day), interval B.a hour), date_add('2017-01-01', interval A.a*7 day) from t1 A, t0 B; SELECT * FROM t2 LIMIT 3; +----+---------------------+------------+ | pk | a | b | +----+---------------------+------------+ | 0 | 2017-01-01 00:00:00 | 2017-01-01 | | 1 | 2017-01-01 01:00:00 | 2017-01-01 | | 2 | 2017-01-01 02:00:00 | 2017-01-01 | ... | 997 | 2019-03-04 07:00:00 | 2018-11-25 | | 998 | 2019-03-04 08:00:00 | 2018-11-25 | | 999 | 2019-03-04 09:00:00 | 2018-11-25 | +-----+---------------------+------------+ explain select * from t2 where date(a) <= '2017-01-01'\G *************************** 1. row *************************** id: 1 select_type: SIMPLE table: t2 type: range possible_keys: a key: a key_len: 6 ref: NULL rows: 10 Extra: Using index condition 

直到 MariaDB 11.0,优化器才会使用索引:

 explain select * from t2 where date(a) <= '2017-01-01'\G *************************** 1. row *************************** id: 1 select_type: SIMPLE table: t2 type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 1000 Extra: Using where 

索引可以与 YEAR 和 DATE 函数一起使用,也可以与任何 >、<、>=、<= 或 = 运算符一起使用:

 explain select * from t2 where year(a) < 2017\G *************************** 1. row *************************** id: 1 select_type: SIMPLE table: t2 type: range possible_keys: a key: a key_len: 6 ref: NULL rows: 1 Extra: Using index condition explain select * from t2 where year(a) = 2019\G *************************** 1. row *************************** id: 1 select_type: SIMPLE table: t2 type: range possible_keys: a key: a key_len: 6 ref: NULL rows: 80 Extra: Using index condition 

UPDATE/DELETE 的半连接优化

MariaDB 有很多半连接优化。以前,单表 UPDATE/DELETE 语句无法利用这些,因为半连接优化是一种不能用于单表 UPDATE/DELETE 的子查询优化。现在,优化器可以自动将单表 UPDATE 和 DELETE 转换为多表 UPDATE/DELETE,从而为它们启用半连接优化。如果你在 UPDATE 或 DELETE 中使用子查询,这些语句可能会快得多(MDEV-7487 ) 例如,比较样本数据集中的这两个 EXPLAIN 结果。首先,在 MariaDB 11.1 之前:

 explain delete from partsupp where (ps_partkey, ps_suppkey) in (select p_partkey, s_suppkey from part, supplier where p_retailprice between 901 and 910 and s_nationkey in (select n_nationkey from nation where n_name='PERU'))\G *************************** 1. row *************************** id: 1 select_type: PRIMARY table: partsupp type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 700 Extra: Using where *************************** 2. row *************************** id: 2 select_type: DEPENDENT SUBQUERY table: nation type: ref possible_keys: PRIMARY,i_n_regionkey,i_n_name key: i_n_name key_len: 26 ref: const rows: 1 Extra: Using where; Using index *************************** 3. row *************************** id: 2 select_type: DEPENDENT SUBQUERY table: part type: eq_ref possible_keys: PRIMARY key: PRIMARY key_len: 4 ref: func rows: 1 Extra: Using where *************************** 4. row *************************** id: 2 select_type: DEPENDENT SUBQUERY table: supplier type: eq_ref possible_keys: PRIMARY,i_s_nationkey key: PRIMARY key_len: 4 ref: func rows: 1 Extra: Using where 

然后,MariaDB 11.1 EXPLAIN 的等效查询:

 explain delete from partsupp where (ps_partkey, ps_suppkey) in (select p_partkey, s_suppkey from part, supplier where p_retailprice between 901 and 910 and s_nationkey in (select n_nationkey from nation where n_name='PERU'))\G *************************** 1. row *************************** id: 1 select_type: PRIMARY table: nation type: ref possible_keys: PRIMARY,i_n_name key: i_n_name key_len: 26 ref: const rows: 1 Extra: Using where; Using index *************************** 2. row *************************** id: 1 select_type: PRIMARY table: supplier type: ref possible_keys: PRIMARY,i_s_nationkey key: i_s_nationkey key_len: 5 ref: test.nation.n_nationkey rows: 1 Extra: Using index *************************** 3. row *************************** id: 1 select_type: PRIMARY table: partsupp type: ref possible_keys: PRIMARY,i_ps_partkey,i_ps_suppkey key: i_ps_suppkey key_len: 4 ref: test.supplier.s_suppkey rows: 1 Extra: *************************** 4. row *************************** id: 1 select_type: PRIMARY table: part type: eq_ref possible_keys: PRIMARY key: PRIMARY key_len: 4 ref: test.partsupp.ps_partkey rows: 1 Extra: Using where 

JSON 模式验证

JSON_SCHEMA_VALID 函数已根据 JSON Schema Draft 2020 实现 ( MDEV-27128 ) 。如果给定的 json 对模式有效,则该函数返回 true,否则返回 false。

 SET @schema= '{ "properties" : { "number1":{ "maximum":10 }, "string1" : { "maxLength": 3} } }'; SELECT JSON_SCHEMA_VALID(@schema, '{ "number1":25, "string1":"ab" }'); +----------------------------------------------------------------+ | JSON_SCHEMA_VALID(@schema, '{ "number1":25, "string1":"ab" }') | +----------------------------------------------------------------+ | 0 | +----------------------------------------------------------------+ SELECT JSON_SCHEMA_VALID(@schema, '{ "number1":10, "string1":"ab" }'); +----------------------------------------------------------------+ | JSON_SCHEMA_VALID(@schema, '{ "number1":10, "string1":"ab" }') | +----------------------------------------------------------------+ | 1 | +----------------------------------------------------------------+ 

InnoDB defragmentation

InnoDB defragmentation 是一个很少使用的功能,它使 OPTIMIZE TABLE 不会像往常一样重建表,而是导致索引 B-trees 就地优化。但是,该选项使用了过多的锁定(独占锁定索引树),从未覆盖 SPATIAL INDEXes 或 FULLTEXT INDEXes,并且从未回收存储空间。由于它不是特别有用,在很多情况下不起作用,并且造成维护负担,它已被删除(MDEV-30545)。

其他特性

  • MDEV-16329 ALTER ONLINE TABLE 已在存储引擎层之上实现,模仿了自 MariaDB 10.0 以来 InnoDB 所做的工作。
  • Mariabackup 是用于执行物理在线备份的工具。它最初是 Xtrabackup 的一个分支,不支持 MariaDB 10.1 的静态数据加密。然而,文件仍然被命名为xtrabackup_*. 它们现在被命名为mariadb_backup_*( MDEV-18931 )

链接

  • 下载 MariaDB 11.1.0
  • 发行说明

相關推薦

2022-09-28

MariaDB 10.11.0 预览版现已推出。官方表示,预览版的设计是为了让用户能提早地体验版本新功能,而不建议应用于生产;并非所有预览版中的功能都会出现在 GA 版本中。v10.11 正在考虑的功能包括有: Authentication GRANT … TO PUBLI

2022-09-21

MariaDB 基金会宣布了 MariaDB 10.9.3、MariaDB 10.8.5 和 MariaDB 10.7.6 的可用性,它们各自的短期支持系列中最新的普遍可用版本(从第一个 GA 发布日期起维护一年)。以及 10.6 长期支持系列(维护五年)中最新的稳定

2022-11-24

MariaDB 基金会宣布 MariaDB 10.11 将作为 LTS 版本提供,这意味着 10.11 系列将比短期支持的 MariaDB 10.10 系列的一年期限要长得多。 MariaDB 10.6 是之前公布的最新的 LTS,它的支持时间为 2021-07-06 至 2026-07-06。此次的 LTS 公告意味着官

2022-08-24

MariaDB 10.10.1 RC 和 10.9.2 GA 现已推出。MariaDB 基金会宣布了 MariaDB 10.10.1 的可用性,这是 MariaDB 10.10 系列中的第一个候选版本,而 MariaDB 10.9.2 则是 MariaDB 10.9 系列中的第一个普遍可用的版本。这些都是短期支持系列,在 GA 后维护一

2023-02-18

MariaDB 10.11.2 现已正式推出。这是 MariaDB 10.11 系列的第一个 GA 版本,一个长期支持版本。 具体更新内容包括: Notable Items Red Hat Enterprise Linux、CentOS、Fedora、openSUSE 和 SUSE 的 Yum/DNF/Zypper 存储库在这个版本中更改为使用带有 SHA2

2023-08-25

PHP 版本更新到 7.4.33 Apache 版本更新到 2.4.57 MySQL(MariaDB) 版本更新到 10.6.15 变更 新增 MYSQL_INTERNAL 环境变量,支持开启或关闭内置MySQL服务 持久化目录调整到 /data ,旧版更新文档 组件二进制目录调

2023-06-07

oma、 iOS 17 、watchOS 10 和 iPadOS 17 等。 macOS Sonoma 发布的是预览版,并未推送到用户侧。macOS Sonoma 主要带来一些视觉和交互体验,以及隐私功能方面的改进: 交互式小组件 用户可将小组件直接置于桌面之上,并通过访问小组

2022-08-02

新版本 —— deepin 23 Preview。 据称,即将发布的deepin 23 预览版将是跨越上游Debian社区基于根社区理念打造的一款根操作系统,是集合社区开源力量、蕴含大量创新技术的全新一代操作系统产品。在这一全新版本中,deepin将从Lin

2022-03-02

Marketplace。这个扩展让开发人员无需离开 Visual Studio 就能预览 ASP.NET 和 ASP.NET Core 项目。该扩展所提供的功能不仅仅只是预览 Web 应用这么简单,使用 Edge 开发者工具做出的修改实际上也会应用于你的源代码之上,这对开发生

2023-08-19

续在 Impeller 的 Vulkan 后端方面取得进展,但尚未达到官方预览期所需的质量水平。计划将在今年晚些时候以稳定版本的形式进入 Android 版 Impeller 的预览期。 尽管 Android 上的 Impeller 尚未完全准备好进行预览,但 OpenGL 和 Vulkan 后

2023-02-10

Google 于今天发布了 Android 14 的首个开发者预览版,这一发布时间与以往的发布时间类似,预计 Android 14 正式版将于今年第三季度推出。 支持多用户登录 一家人共用同一个设备的情况十分常见,尤其是共用平板电脑。除此之

2023-06-22

MariaDB 11.2 是 MariaDB 的一个短期开发系列,并将在其发布后维护一年。它是 MariaDB 11.1 的进化版,具有一些全新的功能。 InnoDB InnoDB 系统表空间现在可以被收缩了 JSON JSON_TABLE 现在允许在迭代 JSON 对象时检索键 新的函数

2023-03-27

Docker 宣布推出与 WebAssembly 集成 (Docker+Wasm) 的第二个技术预览版。 Docker+Wasm 让开发者能够更容易地快速构建面向 Wasm 运行时的应用程序。下图介绍了 Docker 是如何与 WebAssembly 进行集成。 可以看到,Docker Engine 继续使用与整体

2023-03-10

继上个月发布了首个 Android 14 开发者预览版之后,第二版 Android 14 开发者预览版(以下简称 Android 14 DP 2)已于今天开始推出,这也是最后一个开发者预览版,之后 Android 14 将脱离开发者预览阶段,进入 Bete 测试阶段,Android 14 DP