共計(jì) 3920 個(gè)字符,預(yù)計(jì)需要花費(fèi) 10 分鐘才能閱讀完成。
這期內(nèi)容當(dāng)中丸趣 TV 小編將會(huì)給大家?guī)碛嘘P(guān) mysql 中怎么合并表,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
mysql 合并表去重
目標(biāo):
現(xiàn)有表 a 和 b,把兩個(gè)表中的數(shù)據(jù)合并去重到 c 表中。其中 a 和 b 表中數(shù)據(jù)量大概在 2 千萬左右。
基本情況
操作系統(tǒng)版本:CentOS release 5.6 64 位
操作系統(tǒng)內(nèi)存:8G
版本:5.1.56-community 64 位
數(shù)據(jù)庫(kù)初始化參數(shù):默認(rèn)
數(shù)據(jù)庫(kù)表和數(shù)據(jù)量
表 a: www.2cto.com
desc a2kw;
+——-+————-+——+—–+———+——-+
| Field | Type | Null | Key | Default | Extra |
+——-+————-+——+—–+———+——-+
| c1 | varchar(20) | YES | MUL | NULL | |
| c2 | varchar(30) | YES | | NULL | |
| c3 | varchar(12) | YES | | NULL | |
| c4 | varchar(20) | YES | | NULL | |
+——-+————-+——+—–+———+——-+
4 rows in set (0.00 sec)
表 b
mysql desc b2kw;
+——-+————-+——+—–+———+——-+
| Field | Type | Null | Key | Default | Extra |
+——-+————-+——+—–+———+——-+
| c1 | varchar(20) | YES | | NULL | |
| c2 | varchar(30) | YES | | NULL | |
| c3 | varchar(12) | YES | | NULL | |
| c4 | varchar(20) | YES | | NULL | |
+——-+————-+——+—–+———+——-+
4 rows in set (0.00 sec)
a 和 b 表的數(shù)據(jù)概況如下
mysql select * from a2kw limit 10;
+———–+———–+——+———-+
| c1 | c2 | c3 | c4 |
+———–+———–+——+———-+
| 662164461 | 131545534 | TOM0 | 20120520 |
| 226662142 | 605685564 | TOM0 | 20120516 |
| 527008225 | 172557633 | TOM0 | 20120514 |
| 574408183 | 350897450 | TOM0 | 20120510 |
| 781619324 | 583989494 | TOM0 | 20120510 |
| 158872754 | 775676430 | TOM0 | 20120512 |
| 815875622 | 631631832 | TOM0 | 20120514 |
| 905943640 | 477433083 | TOM0 | 20120514 |
| 660790641 | 616774715 | TOM0 | 20120512 |
| 999083595 | 953186525 | TOM0 | 20120513 |
+———–+———–+——+———-+
10 rows in set (0.01 sec)
基本步驟 www.2cto.com
1、在 B 表上創(chuàng)建索引
mysql select count(*) from b2kw;
+———-+
| count(*) |
+———-+
| 20000002 |
+———-+
1 row in set (0.00 sec)
mysql create index ind_b2kw_c1 on b2kw(c1);
Query OK, 20000002 rows affected (1 min 2.94 sec)
Records: 20000002 Duplicates: 0 Warnings: 0
數(shù)據(jù)量為:20000002 , 時(shí)間為:1 min 2.94 sec
2、把 a、b 分別插入中間表 temp 表中
創(chuàng)建中間表
mysql create table temp select * from c2kw where 1=2;
Query OK, 0 rows affected (0.00 sec)
Records: 0 Duplicates: 0 Warnings: 0
插入數(shù)據(jù)
mysql insert into temp select * from a2kw;
Query OK, 20000002 rows affected (13.23 sec)
Records: 20000002 Duplicates: 0 Warnings: 0
mysql insert into temp select * from b2kw;
Query OK, 20000002 rows affected (13.27 sec)
Records: 20000002 Duplicates: 0 Warnings: 0
www.2cto.com
mysql select count(*) from temp;
+———-+
| count(*) |
+———-+
| 40000004 |
+———-+
1 row in set (0.00 sec)
數(shù)據(jù)量為:40000004 , 時(shí)間為:26.50 sec
3、temp 建立聯(lián)合索引,強(qiáng)制索引去掉重復(fù)數(shù)據(jù)
mysql create index ind_temp_c123 on temp(c1,c2,c3);
Query OK, 40000004 rows affected (3 min 43.87 sec)
Records: 40000004 Duplicates: 0 Warnings: 0
查看執(zhí)行計(jì)劃
mysql explain select c1,c2,c3,max(c4) from temp FORCE INDEX
(ind_temp_c123) group by c1,c2,c3 ;
+—-+————-+——-+——-+—————+———-
—–+———+——+———-+——-+
| id | select_type | table | type | possible_keys | key
| key_len | ref | rows | Extra |
+—-+————-+——-+——-+—————+————-
–+———+——+———-+——-+
| 1 | SIMPLE | temp | index | NULL | ind_temp_c123 | 71
| NULL | 40000004 | |
+—-+————-+——-+ www.2cto.com ——-+—————+——–
——-+———+——+———-+——-+
1 row in set (0.05 sec)
mysql insert into c2kw select c1,c2,c3,max(c4) from temp
FORCE INDEX (ind_temp_c123) group by c1,c2,c3 ;
Query OK, 20000004 rows affected (2 min 0.85 sec)
Records: 20000004 Duplicates: 0 Warnings: 0
實(shí)際大約花費(fèi)實(shí)際為:6 min
4、刪除中間表
mysql drop table temp;
Query OK, 0 rows affected (0.99 sec)
實(shí)際大約花費(fèi)實(shí)際為:1 sec
5、建立 c 索引
mysql create index ind_c2kw_c1 on c2kw(c1);
Query OK, 20000004 rows affected (49.74 sec)
Records: 20000004 Duplicates: 0 Warnings: 0
mysql create index ind_c2kw_c2 on c2kw(c2);
Query OK, 20000004 rows affected (1 min 47.20 sec)
Records: 20000004 Duplicates: 0 Warnings: 0
mysql create index ind_c2kw_c3 on c2kw(c3);
Query OK, 20000004 rows affected (2 min 42.02 sec)
Records: 20000004 Duplicates: 0 Warnings: 0
實(shí)際大約花費(fèi)實(shí)際為:5 分鐘 www.2cto.com
6、清空 a、b 表
mysql truncate table a2kw;
Query OK, 0 rows affected (1.15 sec)
mysql truncate table b2kw;
Query OK, 0 rows affected (1.34 sec)
上述就是丸趣 TV 小編為大家分享的 mysql 中怎么合并表了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注丸趣 TV 行業(yè)資訊頻道。