Mysql 8.0.18 hash join测试(推荐)
发表于:2025-02-23 作者:千家信息网编辑
千家信息网最后更新 2025年02月23日,Hash JoinHash Join 不需要任何索引来执行,并且在大多数情况下比当前的块嵌套循环算法更有效。下面通过实例代码给大家介绍Mysql 8.0.18 hash join测试,具体内容如下所示
千家信息网最后更新 2025年02月23日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安全错误
数据库的锁怎样保障安全
支付宝网络安全主管夏巨鹏
数据库的安全性体会
数据库查数据查得慢怎么加索引
全文数据库怎么登录
web服务器有哪些安全
扬子江药业集团软件开发
学软件开发适合做什么
网络安全和生态安全
网络技术字母大小写
服务器断电切换热备
查数据库表信息
怎么同时更改两个表的数据库
台式机上网显示正在连接服务器
北京ios软件开发哪家好
互联网科技书籍推荐
收缩数据库文件
智能 网络技术
戴尔服务器电池怎么更换
网络安全 外交部
幻塔红石柱是哪个服务器的
组装电脑无法连接到服务器
实用网络技术解析
数据库 像
数据库的增删改查的英文
关于网络安全的倡议词
数据库立即窗口完成
广播电视台网络安全措施
软件开发中的p7是什么
软件开发风险是什么
去吧皮卡丘服务器老是断开进不去