91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MYSQL中hash join有什么用

發布時間:2022-01-05 17:13:46 來源:億速云 閱讀:214 作者:小新 欄目:大數據

這篇文章給大家分享的是有關MYSQL中hash join有什么用的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

MYSQL 的多表聯合查詢中,只有nest loop 的查詢方式,讓MYSQL 一致是被“嘲笑”的地方。MYSQL 8.018 后mysql 將擁有HASH JOIN 功能,雖然對比其他數據庫來說,這并不新鮮,但對于MYSQL 算是劃時代的里程碑。

原理之類的先不說,先看效果。建立兩個存儲過程,為C1 表和 C2表插入測試數據

delimiter //

CREATE PROCEDURE insert_c1()

BEGIN

 DECLARE i int ;

DECLARE a varchar(20) ;

DECLARE b smallint ;

set i = 1;

begin 

WHILE i<=1000000 do

 set b = FLOOR(rand()*50);

if i mod 2 = 0 then

set a = 'good';

elseif i mod 3 = 0 then

set a = 'excellent';

elseif i mod 5 = 0 then

set a  = 'ordinary';

elseif i mod 4 = 0 then

set a = 'worsen';

else

set a = 'improvement';

end if;

if b < 20 then

set b = b + 15;

end if;

INSERT into test.status(status,score) values (a,b);

set i = i + 1;

END WHILE;

end;

 END

//

兩個表結構是一樣的

 CREATE TABLE `t1` (

  `id` int(11) NOT NULL AUTO_INCREMENT,

  `c1` varchar(20) DEFAULT NULL,

  `c2` int(11) DEFAULT NULL,

  PRIMARY KEY (`id`),

  KEY `idx_c1` (`c1`)

) ENGINE=InnoDB 

MYSQL中hash join有什么用

從圖中可以清晰的看到查詢已經走了hash  join,那老的MYSQL DBA 可能會提出一個問題,到底這個hash join 比 nest loop 能好多少,可別和MYSQL 8 VS MYSQL 5.7一樣,誰快還不一定。下面做了一個對比,可以清晰的看到在某些情況下,HASH JOIN 在沒有索引的情況下,比添加了索引的NEST LOOP 的速度要快了一倍。

MYSQL中hash join有什么用

 所以到這里,

1 hash join 的確是查詢中需要的功能

2 hash join 的確在某些情況下 比 NEST LOOP 要快

在說明完這些問題后,我們的講講為什么

在MYSQL 中hash join的構造包含兩個流程  1  build  2 probe

1建立的階段就是將需要進行JOIN 的字段,進行一個HASH 值的計算,而到底哪個表要進行這樣的計算,整體SIZE 小的表將被選中,在內存中構建這個計算好值的表

2 匹配的過程,從另外一個表中將字段的值進行計算,與內存中的值匹配的就被選中,否則就拋棄。

這樣操作的好處也是顯而易見的,大大縮減比對的次數

NEST LOOP  如果是  N * S  則 hash join 可以比對為N * distinct S 如果distinct S 變化的值越少,則表的查詢速度越快。

當然這樣還會產生另一個結果,就是我們可以在某些時候放棄JOIN 中建立索引了,如果建立了索引,則MYSQL 會傾向使用 NEST LOOP ,而不走HASH JOIN ,所以到了8.018 這個版本后,MYSQL 的查詢優化,可能又要添加一條想法了。

當然如果想要這個功能,首先先查查你的數據庫目前支持,或打開了這個功能沒有。

MYSQL中hash join有什么用

那hash joinj就無敵了,哪里都能用  NO NO NO  要使用它是有限制的,我們下面吧索引刪除

MYSQL中hash join有什么用

下面的查詢看似和上面的差不多,但就是沒有走HASH JOIN 

MYSQL中hash join有什么用

所以需要記住三個地方是是否能使用HASH JOIN 的前提

1 沒有索引

2 等值運算

3 INNER JOIN 

感謝各位的閱讀!關于“MYSQL中hash join有什么用”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

犍为县| 淮滨县| 光泽县| 塘沽区| 奉化市| 广州市| 资溪县| 泽普县| 高青县| 石河子市| 柳州市| 新竹市| 江安县| 巴彦淖尔市| 东兰县| 垫江县| 平陆县| 台州市| 株洲县| 甘泉县| 巫溪县| 揭东县| 夏邑县| 黑山县| 北京市| 通海县| 平果县| 克山县| 黔西| 平江县| 盱眙县| 宁海县| 大方县| 百色市| 遵化市| 台东市| 华容县| 台南县| 慈溪市| 广州市| 礼泉县|