千家信息网

Mysql 8.0.18 hash join测试(推荐)

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,Hash JoinHash Join 不需要任何索引来执行,并且在大多数情况下比当前的块嵌套循环算法更有效。下面通过实例代码给大家介绍Mysql 8.0.18 hash join测试,具体内容如下所示
千家信息网最后更新 2026年11月01日Mysql 8.0.18 hash join测试(推荐)

Hash Join

Hash Join 不需要任何索引来执行,并且在大多数情况下比当前的块嵌套循环算法更有效。

下面通过实例代码给大家介绍Mysql 8.0.18 hash join测试,具体内容如下所示:

CREATE TABLE COLUMNS_hj as select * from information_schema.`COLUMNS`;INSERT INTO COLUMNS SELECT * FROM COLUMNS; -- 最后一次插入25万行CREATE TABLE COLUMNS_hj2 as select * from information_schema.`COLUMNS`;
explain format=treeSELECT  COUNT(c1. PRIVILEGES), SUM(c1.ordinal_position)FROM COLUMNS_hj c1, COLUMNS_hj2 c2WHERE c1.table_name = c2.table_nameAND c1.column_name = c2.column_nameGROUP BY c1.table_name, c1.column_nameORDER BY c1.table_name, c1.column_name;

必须使用format=tree(8.0.16的新特性)才能查看hash join的执行计划:

-> Sort: .TABLE_NAME, .COLUMN_NAME -> Table scan on   -> Aggregate using temporary table   -> Inner hash join (c1.`COLUMN_NAME` = c2.`COLUMN_NAME`), (c1.`TABLE_NAME` = c2.`TABLE_NAME`) (cost=134217298.97 rows=13421218)    -> Table scan on c1 (cost=1.60 rows=414619)    -> Hash     -> Table scan on c2 (cost=347.95 rows=3237)
set join_buffer_size=1048576000;SELECT  COUNT(c1. PRIVILEGES), SUM(c1.ordinal_position)FROM COLUMNS_hj c1, COLUMNS_hj2 c2WHERE c1.table_name = c2.table_nameAND c1.column_name = c2.column_nameGROUP BY c1.table_name, c1.column_nameORDER BY c1.table_name, c1.column_name;

1.5秒左右。


再来看BNL,先创建索引(分别优化了,再对比效果才公平)。

alter table columns_hj drop index idx_columns_hj;alter table columns_hj2 drop index idx_columns_hj2;create index idx_columns_hj on columns_hj(table_name,column_name);create index idx_columns_hj2 on columns_hj2(table_name,column_name);-> Sort: .TABLE_NAME, .COLUMN_NAME -> Table scan on   -> Aggregate using temporary table   -> Nested loop inner join (cost=454325.17 rows=412707)    -> Filter: ((c2.`TABLE_NAME` is not null) and (c2.`COLUMN_NAME` is not null)) (cost=347.95 rows=3237)     -> Table scan on c2 (cost=347.95 rows=3237)    -> Index lookup on c1 using idx_COLUMNS_hj (TABLE_NAME=c2.`TABLE_NAME`, COLUMN_NAME=c2.`COLUMN_NAME`) (cost=127.50 rows=127)

大约4.5秒。可见hash join效果还是杠杠的。

不得不吐槽下mysql的优化器提示,貌似HASH_JOIN/NO_HASH_JOIN都不生效。

除了hash_join外,mysql 8.0.3引入的SET_VAR优化器提示还是很好用的,可用来设置语句级参数(oracle支持,mariadb记得也支持了的),如下:

mysql> select /*+ set_var(optimizer_switch='index_merge=off') set_var(join_buffer_size=4M) */ c_id from customer limit 1;

SET_VAR支持的变量列表:

auto_increment_incrementauto_increment_offsetbig_tablesbulk_insert_buffer_sizedefault_tmp_storage_enginediv_precision_incrementend_markers_in_jsoneq_range_index_dive_limitforeign_key_checksgroup_concat_max_leninsert_idinternal_tmp_mem_storage_enginejoin_buffer_sizelock_wait_timeoutmax_error_countmax_execution_timemax_heap_table_sizemax_join_sizemax_length_for_sort_datamax_points_in_geometrymax_seeks_for_keymax_sort_lengthoptimizer_prune_leveloptimizer_search_depth variablesoptimizer_switchrange_alloc_block_sizerange_optimizer_max_mem_sizeread_buffer_sizeread_rnd_buffer_sizesort_buffer_sizesql_auto_is_nullsql_big_selectssql_buffer_resultsql_modesql_safe_updatessql_select_limittimestamptmp_table_sizeupdatable_views_with_limitunique_checkswindowing_use_high_precision

总结

以上所述是小编给大家介绍的Mysql 8.0.18 hash join测试,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

支持 测试 效果 还是 帮助 提示 有效 代码 内容 出处 参数 变量 实例 情况 杠杠 特性 疑问 算法 索引 网站 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 深圳九邦互联网科技有限公司 工业互联网科技新基建 上海互联网科技有限公司 迪茉互联网科技 亿策互联网科技 互联网科技缩写 互联网科技上市公司 互联网 视角下的科技创新 佰商互联网科技有限公司 科技类的互联网平台 中正互联网科技招聘 江苏南京365互联网科技 哈尔滨屹滨互联网科技有限公司 互联网科技和法律行业 南博望互联网科技有限公司 山东子淼互联网科技有限公司 山东星卡互联网科技有限公司官网 广州燕处互联网科技有限公司 西安有哪些互联网高科技企业 瑞安市蟠桃会互联网科技有限公司 互联网品科技 港股互联网科技股 深圳齐家互联网科技 火传媒上海互联网科技 荆州市昕露互联网络科技有限公司 亳州好赞互联网科技有限公司 工业互联网展湾科技股份有限公司 西安左小互联网科技有限公司 科技互联网经济论坛 伍佰万互联网科技是干嘛的
0