0

以下のような発言があります

CREATE TABLE INPUT_OUTPUT 
SELECT T1_C1,.....,T1_C300, T1_PID from T1 
    INNER JOIN (SELECT T2_C1,T2_C2,T2_PID FROM T2) as RESPONSE ON T1.T1_PID=RESPONSE.T2_PID

これは非常に遅く実行されています-現在5時間です。2 つのテーブルには、約 400 万行と数百列があります。

私は 8 コア、64GB RAM の ubuntu-linux マシンを持っており、top を使用すると、1 つのコアだけで mysql プロセスによって 3GB も使用されていないことがわかりますが、使用率は一貫して 100% です。すべてのコアが使用されているわけではないことに腹を立てています。

これよりもはるかに速くテーブルを作成したい。

使うべきか

CREATE TABLE INPUT_OUTPUT LIKE T1

T2に関連する列を追加してINPUT_OUTPUTを変更し、それを入力しますか? それを行うための構文と、それが高速化につながるかどうかはわかりません。

4

1 に答える 1

0

T1_PIDインデックスはありますか?もしそうなら、これはすぐに実行されるはずです。クエリEXPLAINの一部を実行して、その内容を確認します。SELECT

とはいえ、なぜサブクエリが必要なのかわかりません。何が問題なのですか:

CREATE TABLE INPUT_OUTPUT 
SELECT T1_C1,.....,T1_C300, T1_PID, T2_C1, T2_C2, T2_PID
FROM T1 INNER JOIN T2 ON T1.T1_PID=T2.T2_PID

または にインデックスがあるT1場合、後者を使用すると機能します。T2PID

于 2012-09-03T04:39:57.290 に答える