Firebird hash join

Posted jonney-wang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Firebird hash join相关的知识,希望对你有一定的参考价值。

Firebird 现可支持哈希连接(hash join),各中大型数据库,哈希连接已成为平常,相对于循环嵌套连接(Nested Loop Join),在数据量较大的情况下,哈希连接性能较好。

由于 Firebird 的sql查询优化器做的不是很好,需要使用者显式的指定是否使用hash join,否则默认就用循环嵌套连接。

在sql语句上可以这样标示,来使用hash join:

1 select * from  b_inbound_puton a
2     join b_inbound_detail b on a.inbound_dt_id +0 = b.id +0
3     join b_inbound c on b.inbound_id +0 = c.id +0
4 where c.id = 0

即,在连接的字段上用 +0 来指定hash join。

执行计划:

 1 Select Expression
 2     -> Filter
 3         -> Hash Join (inner)
 4             -> Filter
 5                 -> Hash Join (inner)
 6                     -> Filter
 7                         -> Table "B_INBOUND" as "C" Access By ID
 8                             -> Bitmap
 9                                 -> Index "PK_B_INBOUND" Unique Scan
10                     -> Record Buffer (record length: 321)
11                         -> Table "B_INBOUND_DETAIL" as "B" Full Scan
12             -> Record Buffer (record length: 313)
13                 -> Table "B_INBOUND_PUTON" as "A" Full Scan

 PLAN HASH (HASH (C INDEX (PK_B_INBOUND), B NATURAL), A NATURAL) 

技术分享图片

 

以上是关于Firebird hash join的主要内容,如果未能解决你的问题,请参考以下文章

Firebird的主要信息

Mysql 优化器内部JOIN算法hash join On-Disk Hash Join Grace Hash Join Hybrid hash join过程详解

如何从URL获取片段标识符(hash#之后的值)?

Hash join算法

spark关于join后有重复列的问题(org.apache.spark.sql.AnalysisException: Reference '*' is ambiguous)(代码片段

Mysql 优化器内部JOIN算法hash join Nestloopjoin及classic hash join CHJ过程详解