卖逼视频免费看片|狼人就干网中文字慕|成人av影院导航|人妻少妇精品无码专区二区妖婧|亚洲丝袜视频玖玖|一区二区免费中文|日本高清无码一区|国产91无码小说|国产黄片子视频91sese日韩|免费高清无码成人网站入口

mysql兩個(gè)表如何合并到一起 MySQL快速對(duì)比數(shù)據(jù)技巧?

在MySQL運(yùn)維中,R ampamp同事們想比較兩個(gè)不同實(shí)例的數(shù)據(jù),找出不同之處。除了主鍵,他們還需要比較每個(gè)字段。如何做到這一點(diǎn)?第一種方案是寫程序比較兩個(gè)例子中的每一行數(shù)據(jù),理論上可行,但是比較

在MySQL運(yùn)維中,R ampamp同事們想比較兩個(gè)不同實(shí)例的數(shù)據(jù),找出不同之處。除了主鍵,他們還需要比較每個(gè)字段。如何做到這一點(diǎn)?

第一種方案是寫程序比較兩個(gè)例子中的每一行數(shù)據(jù),理論上可行,但是比較時(shí)間長(zhǎng)。

第二種方案是將每一行數(shù)據(jù)的所有字段進(jìn)行組合,取校驗(yàn)和值,然后根據(jù)校驗(yàn)和值進(jìn)行比較。似乎可行,不妨一試。

首先要結(jié)合所有字段的值,選擇MySQL提供的CONCAT函數(shù)。如果CONCAT函數(shù)包含空值,那么最終結(jié)果將是NULL,所以我們需要使用IFNULL函數(shù)來(lái)替換空值,比如。

CONCAT(IFNULL(C1,),IFNULL(C2,)

表格里有很多行,手動(dòng)拼一個(gè)腳本很累。唐 別擔(dān)心,你可以用信息來(lái)處理它:

# #獲取列名的串聯(lián)字符串:select group _ concat (ifnull(,column _ name,,))from information _ where table _ name table _ name。

假設(shè)我們有一個(gè)測(cè)試表:

創(chuàng)建表t_test01 ( id INT AUTO_INCREMENT主鍵,C1 INT,C2 INT)

我們可以拼湊出下面的。

從t_test01中選擇id,MD5(CONCAT( IFNULL(id,),IFNULL(c1,),IFNULL(c2,))作為md5_value

通過(guò)在兩個(gè)實(shí)例上執(zhí)行并使用beyond compare比較結(jié)果,很容易找出不同的行和主鍵ID。

對(duì)于數(shù)據(jù)量大的表,執(zhí)行的結(jié)果集也很大,比較困難。請(qǐng)首先嘗試減少結(jié)果集。您可以組合多行記錄的md5值來(lái)查找MD5值。如果最后MD5值相同,這幾行也相同。如果不一樣,那就證明有區(qū)別,然后逐行比較。

假設(shè)我們以1000行為一組來(lái)比較結(jié)果。如果我們需要合并分組的結(jié)果,我們需要使用GROUP_CONCAT函數(shù)。注意在GROUP_CONCAT函數(shù)中加入排序,保證合并數(shù)據(jù)的順序。SQL如下所示:

選擇min(id)作為min_id,max(id)作為max_id,count(1)作為row_count,MD5(GROUP_CONCAT( MD5(CONCAT( IFNULL(id,),IFNULL(c1,),IFNULL(c2,,))ORDER BY id))作為來(lái)自t_test01 GROUP BY (id div 1000)的md5_value

實(shí)施結(jié)果是:

min _ id max _ id row _ count MD5 _ value 0 999 1000 7d 49 def 23611 f 610849 ef 559677 fec0c 1000 1999 1000 95d 61931 aa D3 b48 f1 e 38 b 3550 daee 08 2000 2999 1000 b 02612548 f ae8a 4455418365 B3 AE 611 a 3000 3999 1000

當(dāng)差異數(shù)據(jù)很少的時(shí)候,即使需要比對(duì)幾千萬(wàn)條數(shù)據(jù),我們也可以根據(jù)min_id和max_id輕松定位哪1000條數(shù)據(jù)有差異,然后逐行比對(duì)MD5值,最終找到差異行。

使用GROUP_CONCAT時(shí),需要配置MySQL變量

Or不帶索引,你可以把or的條件分成兩個(gè)sql,用union合并。