MySQL开发组于2019年10月14日正式发布了MySQL 8.0.18 GA版本,带来了一些新特性和增强功能,其中最引人注目的莫过于多表连接查询支持散列连接方式了。我们先来看看官方的描述:
MySQL实现了用于内连接查询的散列连接方式,例如,从MySQL 8.0.18开始以下查询可以使用散列连接进行连接查询:
SELECT * 从t1 加入t2> CREATE TABLE t1 (c1 INT, INT c2); 创建表t2 (c1 INT, INT c2); 创建表t3 (c1 INT, INT c2);
使用解释格式=树命令可以看到执行计划中的散列连接,例如:
mysql>解释格式=树 →SELECT * →从t1 →加入t2 →> SELECT * 从t1 加入t2> mysql>解释格式=树 →SELECT * →从t1 →加入t2 →> mysql>解释格式=树 →SELECT * →从t1 →加入t2 →> mysql>解释 →SELECT * →从t1 →加入t2 →> mysql>解释格式=树 →SELECT * →从t1 →加入t2 →在t1。c2的在50 G \ * * * * * * * * * * * * * * * * * * * * * * * * * * * 1。行 *************************** 解释:→内心的散列连接(成本=0.70=1行) →表扫描> 设置join_buffer_size=2097152000; 设置@@cte_max_recursion_depth=99999999; 插入t1 ——插入t2 ——插入t3 递归t ( 选择1 c1, c2 UNION ALL 选择t。c1 + 1, t。c1 * 2 从t 在t。c1 & lt;1000000 ) SELECT * 从t;
没有索引情况下的散列连接:
mysql>解释分析 →SELECT COUNT (*) →从t1 →加入t2 →> mysql>解释格式=树 →选择/* + NO_HASH_JOIN (t1、t2、t3) */COUNT (*) →从t1 →加入t2 →> mysql>创建索引idx1> mysql>解释分析 →SELECT COUNT (*) →从t1 →加入t2 →(t1。c1=t2 . c1) →加入t3 →(t2。c1=t3.c1) \ G * * * * * * * * * * * * * * * * * * * * * * * * * * * 1。行 *************************** 解释:→总:数(0)(实际时间=47684.034=1 . . 47684.035行循环=1) →嵌套循环内连接(成本=2295573.22=998412行)(实际时间=0.116 . .=1000000循环=1 46363.599行) →嵌套循环内连接(成本=1198056.31=998412行)(实际时间=0.087 . .=1000000循环=1 25788.696行) →过滤:(t1。c1是not null)(成本=100539.40=998412行)(实际时间=0.050 . .=1000000循环=1 5557.847行) →索引扫描在t1使用idx1(成本=100539.40=998412行)(实际时间=0.043 . .=1000000循环=1 3253.769行) →索引查找使用idx2 t2 (c1=t1 . c1)(成本=1.00=1行)(实际时间=0.012,0.015行=1循环=1000000) →索引查找使用idx3 t3 (c1=t1 . c1)(成本=1.00=1行)(实际时间=0.012,0.015行=1循环=1000000) 1行集(47.68秒) mysql>SELECT COUNT (*) →从t1 →加入t2 →(t1。c1=t2 . c1) →加入t3 →(t2。c1=t3.c1); +----------+ | | COUNT (*) +----------+ | 1000000 | +----------+ 1行集(19.56秒)
实际运行花费了19.56秒,所以在我们这个场景中的测试结果如下:
散列连接(无索引) 块嵌套循环(无索引) 块嵌套循环(有索引) 12.98秒 未返回 19.56秒
再增加一个Oracle 12 c中无索引时散列连接结果:1.282 s。
再增加一个PostgreSQL 11.5中无索引时散列连接结果:6.234 s。
再增加一个SQL 2017中无索引时散列连接结果:5.207 s。
以上所述是小编给大家介绍的MySQL 8.0新特性之哈希连接(散列连接),希望对大家有所帮助,如果大家有任何疑问请给我留的言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!