2016-07-27 9 views
0

テーブル「ビジネス」に300,000レコード、テーブル「ミント」に50,000のレコードがあります。どちらも同じフォーマットであるため、すべてがフォニノ・コラムになっていますmysqlの1つのテーブルから別のテーブルへのインポート

私はそれらを挿入する前にビジネステーブルにあるかどうかを確認しようとしているので、ミントテーブルで別の列を作成し、以下のクエリを実行します。すべてのnull値を「ビジネス」に挿入することです。

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

問題は、それは私が一致すべきことであるが、いくつかがある知っているにもかかわらず、timesout、決して私にどんな結果が得られるまで、クエリは永遠に実行されています。明らかに何か間違っているのですか? --------------------------------------編集---------- ---------------------関連するテーブルの

列は以下のとおりです。--- businesses-- BusinessID

|電話

--- mint-- phoneno |入札

mintの入札は、追加された空の列です。ビジネステーブルに存在していれば、後でそれが存在しないレコードを挿入するクエリを実行することができます。

私は基本的に、私がそれを挿入する前に、ミントテーブルからその電話番号が既にビジネスにあるかどうかをチェックしようとしています。

+0

あなたは 'mint'と' businesses'テーブルの定義と結果を期待するサンプルを共有できますか? –

+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

使用することは間違いなく、それを行うための野生の西の方法ですが、あなたは、その使用中に慎重であり、あなたが経験している場合、それは素晴らしいです。キーの衝突が発生すると、行全体がスキップされます。これはあなたのユースケースではないかもしれないことに注意してください。

関連する問題