5

他の小さなテーブルへのいくつかのキーを含む大きなテーブル(約1,000万レコード)があります。キーは小さいテーブルのそれぞれで一意ですが、大きいテーブルでは一意ではありません。一致するキーに基づいて、小さいテーブルの1つから大きいテーブルに列を追加したいのですが、それを行うための「正しい」方法がわかりません。私にはうまくいく解決策がありますが、それはかなりの時間がかかり(それは避けられないかもしれないと思います)、一般的にそれがそれを行うための最適な方法であるとは感じません。これが私が持っているものです:

CREATE TABLE new_big_table LIKE big_table;
ALTER TABLE new_big_table ADD(new_column TINYINT NOT NULL);
INSERT INTO new_big_table SELECT big_table.*, smaller_table.my_column
  FROM big_table JOIN smaller_table ON big_table.key1 = smaller_table.key1
  AND big_table.key2 = smaller_table.key2;

これで仕事は終わりますが、私がすべて間違っているように感じます。少なくとも、これを行うためにテーブルの複製を作成する必要はないようです。これを行うためのより直接的な(そしてより効率的な)方法はありますか?

これは自宅での個人的な趣味のプロジェクトのためのものであることに言及する価値があるかもしれません。そのため、私はマシンのすべてのリソースを自由に占有できます(私だけがそれを使用しているため)。そのため、このようなことを行うための簡単なパフォーマンス調整のヒントがあれば、私はそれらに感謝します(Amazon EC2インスタンスでは、個人のデスクトップよりもはるかに高速でメモリが多いはずなので、これを実験しています) 。

4

1 に答える 1

5

列をインプレースで追加しようとしましたか?

alter table big_table add new_column tinyint;

update  big_table bt
join    smaller_table st
on      bt.key1 = st.key1
        and bt.key2 = st.key2
set     bt.new_column = st.my_column;

alter table big_table modify new_column tinyint not null;
于 2011-03-06T21:32:56.750 に答える