4

わかりました。約175kのINSERTステートメント、かなり大きなINSERTステートメントがあります。例:

INSERT INTO `gast` (`ID`,`Identiteitskaartnummer`,`Naam`,`Voornaam`,`Adres`,`Postcode`,`Stad`,`Land`,`Tel`,`Gsm`,`Fax`,`Email`,`Creditcardnummer`) VALUES ('100001','5121-1131-6328-9416','Cameron','Rhoda','Ap #192-1541 Velit Rd.','54398','Catskill','Bermuda','1-321-643-8255','(120) 502-0360','1 48 428 3971-3704','tempor@justo.org','8378-3645-3748-8446');

(これがオランダ語であるという事実を無視してください)。すべてのデータは完全にランダムです。

私はこれを約3〜4回しなければなりません。私のPCでは、100kのINSERTステートメントのクエリに約1時間かかります。INSERTステートメントを変更せずにこれをより速く行う方法はありますか?MySQLWorkbenchを使用しています。ありがとう。

編集

私はこれまでに提案されたすべてを試しました。INSERTを1つだけ使用し、VALUESを複数使用すると、INSERTステートメントが大きすぎるというエラーが発生します。挿入する前にインデックスを無効にしても、パフォーマンスは向上しません。

コマンドラインからSQLファイルをロードしようとしましたが、それでも何も起こりません...

インサートのパフォーマンスは、インサートごとに0.015秒から0.032秒まで変化します。

4

4 に答える 4

2

すべてのデータを1つのテーブル(データベースを再シードするテーブル)にINSERTし、次にINSERT SELECTステートメントを発行します。これは、175Kの異なるステートメントではなくバッチとして実行されるためです。

また、INSERT SELECTステートメントを使用してデータベースを再シードする場合は、ターゲットテーブルの制約をオフにしALTER TABLE yourtablename DISABLE KEYSてから、後でオンに戻しALTER TABLE yourtablename ENABLE KEYSます。

また、シードデータテーブルにカバーインデックスを個人的に作成します。これにより、データページを読み取る必要がなくなります。

于 2012-08-03T11:21:13.430 に答える
1

1つのステートメントを使用するだけ

INSERT INTO `gast` 

    (`ID`,`Identiteitskaartnummer`,`Naam`,`Voornaam`,`Adres`,`Postcode`,`Stad`,`Land`,`Tel`,`Gsm`,`Fax`,`Email`,`Creditcardnummer`) 
    VALUES 
    ('100001','5121-1131-6328-9416','Cameron','Rhoda','Ap #192-1541 Velit Rd.','54398','Catskill','Bermuda','1-321-643-8255','(120) 502-0360','1 48 428 3971-3704','tempor@justo.org','8378-3645-3748-8446'),
    ('100002','5121-1131-6328-9416','Cameron','Rhoda','Ap #192-1541 Velit Rd.','54398','Catskill','Bermuda','1-321-643-8255','(120) 502-0360','1 48 428 3971-3704','tempor@justo.org','8378-3645-3748-8446')

などなど...

多分あなたはすべての175kの代わりに一度に10000をするべきです

于 2012-08-03T11:19:17.040 に答える
1

別の解決策は、データをテキストファイルに保存してから、LOAD DATALOCALINFILEを使用してデータをロードすることです。

おそらくそれほど良くはありませんが、はるかに高速になります

于 2013-04-23T21:55:35.777 に答える
1

すべてのデータをcsvファイルに入れ、ユーザーがファイルFILENAMEのデータをテーブルTABLEにロードします。1分以上かかることはありません。挿入で実行する場合は、一度に複数の行を送信する単一の挿入を使用することをお勧めします。

于 2013-08-21T12:53:57.983 に答える