現在有兩個表(mysql)
表1欄位如下:省,市,手機號,姓名,其它欄位
表2欄位如下:省,市,手機號,其它欄位
表1和表2的資料庫都較大,日新增資料幾百萬行。
現在對錶1和表2都進行了分表。
需求是:根據兩表中的手機號匹配兩表的資料。
問題是:
1、匹配的好的資料如何儲存,是儲存到第三個表,或者在表1加個欄位,保持表2匹配的行的id。
2、如何查詢未匹配的記錄。
回複內容:
現在有兩個表(mysql)
表1欄位如下:省,市,手機號,姓名,其它欄位
表2欄位如下:省,市,手機號,其它欄位
表1和表2的資料庫都較大,日新增資料幾百萬行。
現在對錶1和表2都進行了分表。
需求是:根據兩表中的手機號匹配兩表的資料。
問題是:
1、匹配的好的資料如何儲存,是儲存到第三個表,或者在表1加個欄位,保持表2匹配的行的id。
2、如何查詢未匹配的記錄。
create table zzz(id int not null,xx ...,primary key(id)) as (select id, xx from table where ..)
http://dev.mysql.com/doc/refm...
未匹配的記錄, 使用一張表作為左表關聯另外一張表, 判斷右表是否有 null 即可
例如
select * from tb1left join tb2 on tb1.mobi=tb2.mobiwhere tb2.mobi is null
這樣的結果就是 tb1 中的所有沒出現在 tb2 的記錄
但是這樣有另外一種情況 tb2 中如果有某個記錄 tb1 不存在的就無法查出 tb1 的未匹配記錄.
其實要查看兩表是否全部匹配可以使用 full join 來進行匹配, 但是從你的這個資料量來看, 建議不要使用 full join , 就算用也不要查全部的.
關於 join 用法看這張圖
表的最佳化
1、手機號欄位建索引
2、分表建議按手機號前幾位來分表。
關於儲存
建議表1表2分別加欄位,儲存另一表中的行。下次更新處理的時候可以跳過欄位有值的部分處理。
未匹配的就是欄位為空白的。
另外
建議把更新直接放到記錄的時候,往表1中加資料的時候查詢是否在表2中存在。
查詢的可以
select * from t1,t2 where t1.mobile = t2.mobile
查詢出來了就可以建立新的了