发布时间:2025-11-03 16:50:13 来源:技术快报 作者:系统运维

在刚刚过去的出全 MySQL Summit 2025 大会上,Oracle 发布了一个用于 MySQL 的化器全新 Hypergraph(超图)优化器,能够为复杂的正式多表查询生成更好的执行计划,从而优化查询性能。进军

这个功能目前只在 MySQL HeatWave 云数据库中提供;MySQL 社区版如果想要支持的领域话,需要在源码编译安装时启用相关配置(-DWITH_DEBUG=1)。出全
以下是化器官方给出的一个性能测试结果:

接下来我们看两个使用示例,首先启用优化器配置:
复制MySQL >SETSESSION optimizer_switch=hypergraph_optimizer=on;1.如果上面的免费信息发布网正式语句没有返回错误,表示成功启用 Hypergraph 优化器。进军
然后比较以下查询在使用传统优化器和 Hypergraph 优化器时的领域区别:
复制MySQL >WITH salary_rank AS( SELECT e.emp_no, e.first_name, e.last_name, d.dept_no, s.salary, RANK()OVER( PARTITIONBY d.dept_no ORDERBY s.salary DESC )AS dept_rank FROM employees e JOIN dept_emp d ON e.emp_no = d.emp_no JOIN salaries s ON e.emp_no = s.emp_no WHERE s.to_date =9999-01-01AND d.to_date =9999-01-01 ) SELECT*FROM salary_rank WHERE dept_rank =1;1.2.3.4.5.6.7.8.9.10.11.该查询使用了 CTE 和窗口函数获取每个部门中薪水最高的员工。
传统优化器返回的出全结果如下:
复制+--------+------------+-----------+---------+--------+-----------+ | emp_no | first_name | last_name | dept_no | salary | dept_rank | +--------+------------+-----------+---------+--------+-----------+ |466852| Akemi | Warwick | d001 |145128|1| |413137| Lunjin | Swick | d002 |142395|1| |421835| Yinlin | Flowers | d003 |141953|1| |430504| Youjian | Cronau | d004 |138273|1| |13386| Khosrow | Sgarro | d005 |144434|1| |472905| Shin | Luck | d006 |132103|1| |43624| Tokuyasu | Pesch | d007 |158220|1| |425731| Ramachenga | Soicher | d008 |130211|1| |18006| Vidya | Hanabata | d009 |144866|1| +--------+------------+-----------+---------+--------+-----------+ 9rowsinset(2.1155 sec)1.2.3.4.5.6.7.8.9.10.11.12.13.14.Hypergraph 优化器返回的结果如下:
复制+--------+------------+-----------+---------+--------+-----------+ | emp_no | first_name | last_name | dept_no | salary | dept_rank | +--------+------------+-----------+---------+--------+-----------+ |466852| Akemi | Warwick | d001 |145128|1| |413137| Lunjin | Swick | d002 |142395|1| |421835| Yinlin | Flowers | d003 |141953|1| |430504| Youjian | Cronau | d004 |138273|1| |13386| Khosrow | Sgarro | d005 |144434|1| |472905| Shin | Luck | d006 |132103|1| |43624| Tokuyasu | Pesch | d007 |158220|1| |425731| Ramachenga | Soicher | d008 |130211|1| |18006| Vidya | Hanabata | d009 |144866|1| +--------+------------+-----------+---------+--------+-----------+ 9rowsinset(1.6108 sec)1.2.3.4.5.6.7.8.9.10.11.12.13.14.查询结果一致,但是化器 Hypergraph 优化器速度更快。
接下来比较一下 EXPLAIN 语句针对两种优化器返回的正式执行计划,注意 Hypergraph 优化器只支持 TREE 或者 JSON 格式。进军
首先是云南idc服务商领域传统优化器:

然后是 Hypergraph 优化器:

虽然 Hypergraph 优化器显示的最终成本更高,但是由于它们采用的计算模型不同,实际上比较不同优化器的成本没有任何意义。
我们能够看到传统优化器采用了 Nested Loop Inner Join 方式连接两个表,Hypergraph 优化器则采用了 Inner Hash Join 方式,后者获得了更好的查询性能。
期待一下 MySQL 全系产品支持 Hypergraph 优化器,正式进军 OLAP 领域!亿华云
随便看看