1. 程式人生 > >Firebird hash join

Firebird hash join

detail express sql access 哈希 fire alt lan can

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