現有表a和b,把兩個表中的資料合併去重到c表中。其中a和b表中資料量大概在2千萬左右。
作業系統版本:centos release 5.6 64位
作業系統記憶體:8g
資料庫版本:5.1.56-community 64位
資料庫初始化引數:預設
表a:
mysql> 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表的資料概況如下
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)
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
資料量為:20000002 ,時間為:1 min 2.94 sec
建立中間表
mysql> create table temp select * from c2kw where 1=2;
query ok, 0 rows affected (0.00 sec)
records: 0 duplicates: 0 warnings: 0
插入資料
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
mysql> select count(*) from temp;
| count(*) |
| 40000004 |
1 row in set (0.00 sec)
資料量為:40000004 ,時間為:26.50 sec
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
檢視執行計畫
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 | ****** | temp | index | null | ind_temp_c123 | 71 | null | 40000004 | |
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
實際大約花費實際為:6 min
mysql> drop table temp;
query ok, 0 rows affected (0.99 sec)
實際大約花費實際為:1 sec
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
實際大約花費實際為:5
分鐘mysql> truncate table a2kw;
query ok, 0 rows affected (1.15 sec)
mysql> truncate table b2kw;
query ok, 0 rows affected (1.34 sec)
實際大約花費實際為:3sec
一共花費的時間大概在
15分鐘左右
千萬級別mysql合併表快速去重
現有表a和b,把兩個表中的資料合併去重到c表中。其中a和b表中資料量大概在2千萬左右。作業系統版本 centos release 5.6 64位 作業系統記憶體 8g 資料庫版本 5.1.56 community 64位 資料庫初始化引數 預設 表a mysql desc a2kw field ty...
千萬級別mysql資料表優化
第一優化你的sql和索引 第二加快取,memcached,redis 第三以上都做了後,還是慢,就做主從複製或主主複製,讀寫分離,可以在應用層做,效率高,也可以用三方工具,第三方工具推薦360的atlas,其它的要麼效率不高,要麼沒人維護 第四如果以上都做了還是慢,不要想著去做切分,mysql自帶分...
Mysql千萬級別資料優化方案 單錶
mysql千萬級別資料優化方案 目錄 目錄 1 一 目的與意義 2 1 說明 2 二 解決思路與根據 本測試表中資料在千萬級別 2 1 建立索引 2 2 資料體現 主鍵非索引,實際測試結果 其中fid 建立索引 2 3 mysql 分頁原理 2 4 經過實際測試當對表所有列查詢時 2 三 總結 3 ...