0

多くの挿入を実行している mySQL ストアド プロシージャがあります。パフォーマンスが悪かったので、INSERT 用の文字列を作成するのではなく、すべてのループに挿入しないことに決め、手順の最後に、準備済みステートメントを使用してすべての値に対して 1 つの大きな INSERT を実行しました。

問題は、ステートメントが VARCHAR よりも大きくなることです。それはTEXTでなければなりません。

質問は: 私はそれを行うことができますか? または、準備されたステートメントは VARCHAR である必要がありますか? 準備済みステートメントの最大長は?

4

2 に答える 2

1

LOAD DATAを使用します。これは、mySQL で多くの挿入を行うときに最高のパフォーマンスを発揮するオプションであり、入力データも変更できます。

于 2013-10-21T23:34:30.720 に答える
0

確認してください: http://dev.mysql.com/doc/refman/5.0/en/packet-too-large.html - 単一のクエリに対するこの実際の制限

しかし、あなたの問題はより深く見えます。あまりにも多くの挿入を実行する必要がある場合は、単一の挿入ステートメントを準備し、ループ内でそれに値をバインドして 1 つずつ実行する必要があります。

このプロセスを高速化するには、自動コミットをオフに設定する必要がありますが、次の問題が発生します: http://dev.mysql.com/doc/refman/5.0/en/innodb-restrictions.html

InnoDB では、データを変更して取り消しレコードを作成した同時トランザクションは 1023 に制限されています。

およびinnodb_log_file_size

この両方の設定はトランザクション サイズを制限するため、基本的には N 行ごとに (1 行ごとではなく) コミットを追加する必要があります。

更新: @BillKarwin からのコメントを確認してください。基本的に、トランザクション サイズに制限はないと言えます。

于 2013-10-21T22:44:24.027 に答える