2016-07-27 73 views
0

我有300,00條記錄表「業務」,並在表中「薄荷」 50000都有其潔淨了「PHONENO」山坳(他們都以相同的格式等都是可行的是我的匹配方式)從一個表導入到另一個在MySQL

我試着去檢查,如果他們是在業務表之前,我把它們插入,所以我做的薄荷表的另一列,並運行下面的查詢。這個想法是將所有的空值插入到「企業」中。

update mint t9 
inner join businesses b 
    on b.Telephone = t9.phoneno 
set t9.bid = b.businessID 

的問題是查詢只是一直運行,直到它timesout,從來沒有給我任何結果,即使我知道有一些應該匹配。我做了什麼明顯錯誤? --------------------------------------編輯---------- ---------------------

是相關表中的列有:

--- businesses-- BusinessID |電話

--- mint-- PHONENO |投標

薄荷的出價是一個空列添加我的想法是插入,如果它在業務表存在,所以我可以在以後運行一個查詢,插入無existant記錄。

我基本上是想檢查是否從薄荷表中的電話號碼已經在企業之前,我將它插入,否則我想更新它。

+0

您可以分享「mint」和「business」表格定義以及您期望結果的樣本嗎? –

+0

@JonathonOgden對不起,我做了一個編輯。 –

+0

這些與_keys_相關的列還是有_indices_(索引)的呢? –

回答

0

幾種方法浮現在腦海中。

分段:由於超時並且這很常見,請分段進行更新。我會經常這樣做,如

update mint t9 
inner join businesses b 
on b.Telephone = t9.phoneno 
set t9.bid = b.businessID 
where t9.id between 1 and 50000; 

update mint t9 
inner join businesses b 
on b.Telephone = t9.phoneno 
set t9.bid = b.businessID 
where t9.id between 50001 and 100000; 

等等你得到的想法。原因是InnoDB將它記錄爲隱式事務,並且發生超時。當我反對數千萬行時,我遇到了這個問題。

IODKU:使用INSERT ... ON DUPLICATE KEY UPDATE。看到我的例子之一here

使用INSERT IGNORE ...

Insert ignore絕對是做它的狂野西部的方式,但如果你是在它的使用小心,你是有經驗的,是偉大的。如果發生鍵衝突,整行將被跳過。請注意,這可能不是您的使用案例。

相關問題