効率的なパフォーマンスのための MySQL データベースの行挿入の最適化
大量の行を MySQL データベースに効率的に挿入するという課題はよく知られています。個別の挿入を使用する提供されたコード スニペットは見慣れたものかもしれませんが、パフォーマンスのボトルネックになります。ただし、挿入速度を大幅に向上できる代替アプローチが存在します。
複数行の挿入
行ごとに個別の挿入を実行する代わりに、次のようにする方が効率的です。複数の行を 1 つの挿入ステートメントにグループ化します。この手法は、次の改訂されたコードに実装されています。
public static void BulkToMySQL() { string ConnectionString = "server=192.168.1xxx"; StringBuilder sCommand = new StringBuilder("INSERT INTO User (FirstName, LastName) VALUES "); using (MySqlConnection mConnection = new MySqlConnection(ConnectionString)) { List<string> Rows = new List<string>(); for (int i = 0; i < 100000; i++) { Rows.Add(string.Format("('{0}','{1}')", MySqlHelper.EscapeString("test"), MySqlHelper.EscapeString("test"))); } sCommand.Append(string.Join(",", Rows)); sCommand.Append(";"); mConnection.Open(); using (MySqlCommand myCmd = new MySqlCommand(sCommand.ToString(), mConnection)) { myCmd.CommandType = CommandType.Text; myCmd.ExecuteNonQuery(); } } }
パフォーマンスの向上
このアプローチにより、挿入時間が大幅に短縮されます。元のコードでは 100,000 行の挿入に 40 秒かかりましたが、修正されたコードではタスクがわずか 3 秒で完了し、90% 以上改善されました!
説明
この効率向上の鍵は、データベースのラウンドトリップを最小限に抑えることにあります。複数の行を 1 つのステートメントにグループ化することで、複数のデータベース接続の確立と終了に関連するオーバーヘッドが削減されます。これにより、データベースは挿入のグループ全体を 1 つの操作として処理できるようになり、行ごとに個別に実行する必要がなくなります。
セキュリティに関する考慮事項
常に次のことを行うことが重要です。 SQL ステートメントを構築する際のコード インジェクションから保護します。提供されたコードで MySqlHelper.EscapeString を使用すると、悪意のある可能性のある入力が安全にエスケープされ、SQL インジェクションの脆弱性が防止されます。
以上がパフォーマンスを向上させるために MySQL データベースの行挿入を最適化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。