日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

SQL JOIN-Hash Join

發(fā)布時(shí)間:2024/4/15 数据库 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SQL JOIN-Hash Join 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1概述

hash join 在特性與merge join相同,都需要一個(gè)等值條件。當(dāng)在連接條上無法命中索引,或大集合的Join, nested join和 merge join可能就無法得到很好的性能,這時(shí)我們就需要考慮用hash join.

2基本算法

Hash join 分為兩個(gè)階段,build和probe。在build階段,會將其中一個(gè)集合作為build set,然后hash build table在連接條件上的列,并將結(jié)果存儲在內(nèi)存中的(命名為build hash table). ?在probe階段(將第二個(gè)集合命名為probe set),每一行hash probe set在連接條件上的列,然后與build hash table比較,如果相等,則返回。

偽代碼:

for each row R1 in the build table
??? begin
??????? calculate hash value on R1 join key(s)
??????? insert R1 into the appropriate hash bucket
??? end
for each row R2 in the probe table
??? begin
??????? calculate hash value on R2 join key(s)
??????? for each row R1 in the corresponding hash bucket
??????????? if R1 joins with R2
??????????????? return (R1, R2)
??? end

3 示例

測試數(shù)據(jù)

View Code create table T1 (a int, b int, x char(200))create table T2 (a int, b int, x char(200))create table T3 (a int, b int, x char(200))set nocount ondeclare @i intset @i = 0while @i < 1000begininsert T1 values (@i * 2, @i * 5, @i)set @i = @i + 1endset @i = 0while @i < 10000begininsert T2 values (@i * 3, @i * 7, @i)set @i = @i + 1endset @i = 0while @i < 100000begininsert T3 values (@i * 5, @i * 11, @i)set @i = @i + 1end

執(zhí)行SQL:

SET STATISTICS PROFILE ON select * from (T1 inner join T2 on T1.a = T2.a)inner join T3 on T1.b = T3.a option (hash join)

執(zhí)行結(jié)果:

總結(jié)

以上是生活随笔為你收集整理的SQL JOIN-Hash Join的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。