我的编程空间,编程开发者的网络收藏夹
学习永远不晚

MySQL 支持Hash Join咯

短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

MySQL 支持Hash Join咯

MySQL 支持Hash Join咯

0.20 对非等值条件(执行Hash Join再进行过滤(Filter)),笛卡尔积都能使用Hash Join。

CREATE TABLE `t4` (
  `c1` int DEFAULT NULL,
  `c2` int DEFAULT NULL,
  `c3` int DEFAULT NULL,
  `c4` int DEFAULT NULL,
  KEY `c1` (`c1`,`c2`,`c3`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;


CREATE TABLE `t5` (
  `c1` int DEFAULT NULL,
  `c2` int DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;


delimiter ;;
create procedure load_t5()
    begin
    declare i int;
    set i=0;
    while(i<1000)
    do
       insert into t4(c1,c2,c3,c4) values(i,i,1000-i,i);
       insert into t5(c1,c2) values(i,i);
       set i=i+1;
    end while;
    end;;
delimiter ;
call load_t5();

# 执行Join 查询,对驱动表不能使用索引的查询,8.0开始支持使用Hash Join
root [t37](17:55 | DB102_8.0.20) >desc select t4.c4 from t4,t5 where t4.c3=t5.c1;
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+--------------------------------------------+
| id | select_type | table | partitions | type | possible_keys | key  | key_len | ref  | rows | filtered | Extra                                      |
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+--------------------------------------------+
|  1 | SIMPLE      | t4    | NULL       | ALL  | NULL          | NULL | NULL    | NULL |    8 |   100.00 | NULL                                       |
|  1 | SIMPLE      | t5    | NULL       | ALL  | NULL          | NULL | NULL    | NULL | 1000 |    10.00 | Using where; Using join buffer (hash join) |
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+--------------------------------------------+
2 rows in set, 1 warning (0.01 sec)

root [t37](18:01 | DB102_8.0.20) >desc select t4.c4 from t4,t5 where t4.c3=t5.c1 and t4.c1 < 100;
+----+-------------+-------+------------+-------+---------------+------+---------+------+------+----------+--------------------------------------------+
| id | select_type | table | partitions | type  | possible_keys | key  | key_len | ref  | rows | filtered | Extra                                      |
+----+-------------+-------+------------+-------+---------------+------+---------+------+------+----------+--------------------------------------------+
|  1 | SIMPLE      | t4    | NULL       | range | c1            | c1   | 5       | NULL |    8 |   100.00 | Using index condition                      |
|  1 | SIMPLE      | t5    | NULL       | ALL   | NULL          | NULL | NULL    | NULL | 1000 |    10.00 | Using where; Using join buffer (hash join) |
+----+-------------+-------+------------+-------+---------------+------+---------+------+------+----------+--------------------------------------------+
2 rows in set, 1 warning (0.00 sec)

内存大小由参数join_buffer_size控制,超过容量将使用磁盘文件,适当调大join_buffer_sizeopen_files_limit参数,避免失败。从8.0.20开始,内存大小是按需分配的,不会一开始就分配参数配置的大小,避免浪费。

官档:

2.1.4 Hash Join Optimization

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

MySQL 支持Hash Join咯

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

MySQL 支持Hash Join咯

8.0.20 对非等值条件(执行Hash Join再进行过滤(Filter)),笛卡尔积都能使用Hash Join。CREATE TABLE `t4` ( `c1` int DEFAULT NULL, `c2` int DEFAULT NULL, `c3
MySQL 支持Hash Join咯
2018-12-05

技术分享 | Hash join in MySQL 8

作者:Erik Frøseth翻译:管长龙原文:https://mysqlserverteam.com/hash-join-in-mysql-8/长期以来,在 MySQL 中执行 join 查询的只是嵌套循环算法的变体。随着 MySQL 8.0.18 的发布,
技术分享 | Hash join in MySQL 8
2020-01-17

MySQL 8.0 hash join有重大缺陷?

徐春阳老师发文爆MySQL 8.0 hash join有重大缺陷。 文章核心观点如下:多表(比如3个个表)join时,只会简单的把表数据量小的放在前面作为驱动表,大表放在最后面,从而导致可能产生极大结果集的笛卡尔积,甚至耗尽CPU和磁盘空间。 就此现象,我也做
MySQL 8.0 hash join有重大缺陷?
2017-11-25

mysql支不支持unique索引

这篇文章主要讲解了“mysql支不支持unique索引”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“mysql支不支持unique索引”吧!mysql支持uni
2023-04-13

PHP支持MySQL吗

这篇文章主要讲解了“PHP支持MySQL吗”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“PHP支持MySQL吗”吧!PHP支持MySQL;MySQL是与PHP搭配使用最多的数据库,它们常被称
2023-07-02

MySQL 8.0.19支持DNS SRV

MySQL Router是InnoDB Cluster架构的访问入口,在架构部署上,官方给出的建议是router与应用端绑定部署,避免router单点问题。之前还有客户咨询,能否router不与应用端绑定部署,不便于部署,在此之前都需要在router前面加VI
MySQL 8.0.19支持DNS SRV
2016-03-13

PHP是否支持MySQL

PHP支持MySQL;MySQL是与PHP搭配使用最多的数据库,它们常被称为“黄金组合”。PHP中提供了完整的操作MySQL数据库的函数,这些函数包括了从连接数据库、执行SQL语句、处理数据结果集到关闭数据库的方方面面;通过这些函数,使基于 MySQL 数据库的 Web 开发高效而简单。本教程操作环境:windows7系统、PHP8.1&&mysql8版本、Dell G3电脑。数据库可以说是一个网站
2022-06-14

编程热搜

目录