散列连接不需要任何索引来执行,并且在大多数情况下比当前的块嵌套循环算法更有效。
下面通过实例代码给大家介绍Mysql 8.0.18散列连接测试,具体内容如下所示:
创建表COLUMNS_hj select * from information_schema.“列”; 插入列SELECT * FROM列;——最后一次插入25万行 创建表COLUMNS_hj2 select * from information_schema.“列”,
解释格式=树 选择 计数(c1。特权), 总和(c1.ordinal_position) 从 COLUMNS_hj c1, COLUMNS_hj2 c2 在哪里 c1。table_name=c2.table_name 和c1。column_name=c2.column_name 集团 c1.table_name, c1.column_name 命令 c1.table_name, c1.column_name;
必须使用格式=树(8.0.16的新特性)才能查看散列连接的执行计划:
→:& lt; temporary>。TABLE_NAME & lt; temporary> .COLUMN_NAME →表扫描> 设置join_buffer_size=1048576000; 选择 计数(c1。特权), 总和(c1.ordinal_position) 从 COLUMNS_hj c1, COLUMNS_hj2 c2 在哪里 c1。table_name=c2.table_name 和c1。column_name=c2.column_name 集团 c1.table_name, c1.column_name 命令 c1.table_name, c1.column_name;
1.5秒左右。
再来看BNL,先创建索引(分别优化了,再对比效果才公平)。
alter table columns_hj下降指数idx_columns_hj; alter table columns_hj2下降指数idx_columns_hj2; 创建索引idx_columns_hj> mysql>选择/* + set_var (optimizer_switch=index_merge=off) set_var join_buffer_size=4米*/c_id从客户限制1;
SET_VAR支持的变量列表:
auto_increment_increment auto_increment_offset big_tables bulk_insert_buffer_size default_tmp_storage_engine div_precision_increment end_markers_in_json eq_range_index_dive_limit foreign_key_checks group_concat_max_len insert_id internal_tmp_mem_storage_engine join_buffer_size lock_wait_timeout max_error_count max_execution_time max_heap_table_size max_join_size max_length_for_sort_data max_points_in_geometry max_seeks_for_key max_sort_length optimizer_prune_level optimizer_search_depth变量 optimizer_switch range_alloc_block_size range_optimizer_max_mem_size read_buffer_size read_rnd_buffer_size sort_buffer_size sql_auto_is_null sql_big_selects sql_buffer_result sql_mode sql_safe_updates sql_select_limit 时间戳 tmp_table_size updatable_views_with_limit unique_checks windowing_use_high_precision
以上所述是小编给大家介绍的Mysql 8.0.18散列连接测试,希望对大家有所帮助,如果大家有任何疑问请给我留的言,小编会及时回复大家的。在此也非常感谢大家对网站的支持。
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!