日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
MySQL快速對比數(shù)據(jù)技巧的示例分析

小編給大家分享一下MySQL快速對比數(shù)據(jù)技巧的示例分析,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

網(wǎng)站建設(shè)、成都做網(wǎng)站服務(wù)團(tuán)隊(duì)是一支充滿著熱情的團(tuán)隊(duì),執(zhí)著、敏銳、追求更好,是創(chuàng)新互聯(lián)的標(biāo)準(zhǔn)與要求,同時(shí)竭誠為客戶提供服務(wù)是我們的理念。創(chuàng)新互聯(lián)把每個網(wǎng)站當(dāng)做一個產(chǎn)品來開發(fā),精雕細(xì)琢,追求一名工匠心中的細(xì)致,我們更用心!

在MySQL運(yùn)維中,研發(fā)同事想對比下兩個不同實(shí)例上的數(shù)據(jù)并找出差異,除主鍵外還需要對比每一個字段,如何做呢?

第一種方案,寫程序?qū)蓚€實(shí)例上的每一行數(shù)據(jù)取出來進(jìn)行對比,理論可行,但是對比時(shí)間較長。

第二種方案,對每一行數(shù)據(jù)所有字段合并起來,取checksum值,再按照checksum值對比,看著可行,嘗試下。

首先要合并所有字段的值,選用MySQL提供的CONCAT函數(shù),如果CONCAT函數(shù)中包含NULL值,會導(dǎo)致最終結(jié)果為NULL,因此需要使用IFNULL函數(shù)來替換NULL值,如:

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

加入表有很多行,手動拼個腳本比較累,別急,可以使用information_schema.COLUMNS來處理:

## 獲取列名的拼接串
SELECT
GROUP_CONCAT('IFNULL(',COLUMN_NAME,','''')')
FROM information_schema.COLUMNS 
WHERE TABLE_NAME='table_name';

假設(shè)我們有測試表:

CREATE TABLE t_test01
(
 id INT AUTO_INCREMENT PRIMARY KEY,
 C1 INT,
 C2 INT
)

我們便可以拼接出下面的SQL:

SELECT
id,
MD5(CONCAT(
IFNULL(id,''),
IFNULL(c1,''),
IFNULL(c2,''),
)) AS md5_value
FROM t_test01

在兩個實(shí)例上執(zhí)行下,然后把結(jié)果使用beyond compare對比下,就很容易找出不相同的行以及主鍵ID

對于數(shù)據(jù)量較大的表,執(zhí)行出來的結(jié)果集也很大,對比起來比較費(fèi)勁,那就先嘗試縮小結(jié)果集,可以將多行記錄的md5值合并起來求MD5值,如果最后MD5值相同,則這些行相同,如果不同,則證明存在差異,再按照這些行進(jìn)行逐行對比。

假設(shè)我們按照1000行一組來進(jìn)行對比,如果需要將分組后的結(jié)果合并,需要使用GROUP_CONCAT函數(shù),注意在GROUP_CONCAT函數(shù)中添加排序保證合并數(shù)據(jù)的順序, SQL如下:

SELECT
min(id) as min_id,
max(id) as max_id,
count(1) as row_count,
MD5(GROUP_CONCAT(
MD5(CONCAT(
IFNULL(id,''),
IFNULL(c1,''),
IFNULL(c2,''),
)) ORDER BY id
))AS md5_value
FROM t_test01
GROUP BY (id div 1000)

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

min_id  max_id  row_count  md5_value
0    999    1000     7d49def23611f610849ef559677fec0c
1000   1999    1000     95d61931aa5d3b48f1e38b3550daee08
2000   2999    1000     b02612548fae8a4455418365b3ae611a
3000   3999    1000     fe798602ab9dd1c69b36a0da568b6dbb

當(dāng)差異數(shù)據(jù)較少時(shí),即使需要對比上千萬數(shù)據(jù),我們可以輕松根據(jù)根據(jù)min_id和max_id來快速定位到哪1000條數(shù)據(jù)里存在差異,再進(jìn)行逐行MD5值對比,最終找到差異行。

最終對比圖:

MySQL快速對比數(shù)據(jù)技巧的示例分析

PS:

在使用GROUP_CONCAT時(shí),需要配置MySQL變量group_concat_max_len,默認(rèn)值為1024,超出部分會被階段。

看完了這篇文章,相信你對“MySQL快速對比數(shù)據(jù)技巧的示例分析”有了一定的了解,如果想了解更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!


新聞標(biāo)題:MySQL快速對比數(shù)據(jù)技巧的示例分析
URL網(wǎng)址:http://www.dlmjj.cn/article/pgpgdi.html