3

私は高速ストレージと多くのメモリとプロセッサパワーを備えたLAMPサーバーを持っています。

同じ構造のテーブルが2つあり、1つは30.000.000レコードで、もう1つは空です。最初のテーブルから2番目のテーブルにデータをコピーして、このリクエストを使用したい:

 INSERT INTO table2 SELECT * FROM table1 ;

このリクエストは、完了するまでに4時間以上かかります。mysqldumpのせいでこれは正常ではないと思いますentire database finishes less then hour

SELECTリクエストに制限はありますか?または、他のコードを使用する必要がありますoptimize performanceか?

4

4 に答える 4

1

スキーマが最初のテーブルと同じであることを確認してから、Insertqueryで値の順序を指定します* Selectクエリのパフォーマンスを低下させ、NoLockデータの可用性 を向上させます

お気に入り、

Begin Tran
      INSERT INTO (Col1,Col2, Col3,...Coln) table2 
    SELECT (Col1,Col2, Col3,...Coln) FROM table1 with (NoLock)
Commit
于 2012-10-01T12:14:08.820 に答える
0

おそらく、データのインデックス作成やストレージスペースの割り当てなどのハウスキーピングタスクにかかっています。

于 2012-10-01T12:10:03.540 に答える
0

3,000万はたくさんあります。各クエリで100〜1000の結果が得られるように、ビット単位でクエリを実行します。

また

オペレーションエリアでphpmyadminを使用することをお勧めします(最初にソーステーブルを選択します)。コピーテーブルが表示されます。

また

異なる場所にコピーする場合は、mysqlworkbenchを使用して新しいテーブルにエクスポートおよびインポートします。お役に立てれば。

于 2012-10-01T12:11:50.420 に答える
0

数千を超えるレコードを追加する場合、特に書き込み先のテーブルが使用されていない場合。追加中はインデックスをオフにし、後でオンに戻します。複数のインデックスがある場合は、それらすべてを実行してください。

ALTER TABLE table_nameDISABLE KEYS;

データをインポートしてオンに戻します。

ALTER TABLE table_nameENABLE KEYS;

詳細については、http://support.tigertech.net/mysql-large-insertsを参照してください。

于 2012-10-01T12:14:21.207 に答える