ホームページ > データベース > mysql チュートリアル > MySQL への行の超高速一括挿入を実現するにはどうすればよいですか?

MySQL への行の超高速一括挿入を実現するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-11-24 20:19:14
オリジナル
739 人が閲覧しました

How Can I Achieve Ultra-Fast Bulk Insertion of Rows into MySQL?

MySQL 行挿入の最適化: 超高速一括挿入の実現

この記事では、MySQL への効率的な行挿入のニーズについて説明します。データベース。挿入時間を大幅に短縮し、データベース全体のパフォーマンスを向上させる最適化されたソリューションを紹介します。

バックグラウンド

多くの開発者は、大量のデータを MySQL に挿入するときにパフォーマンスのボトルネックに遭遇します。個々の SQL ステートメントを使用するループベースのアプローチは機能しますが、非効率的で時間がかかる可能性があります。

問題ステートメント

提供された例では、ループベースのコードは次のようになります。 MySQL データベースに 100,000 行を挿入するのに 40 秒かかり、より効率的なデータベースの必要性が強調されています。

解決策

ループベースのアプローチを、StringBuilder を使用した一括挿入手法に置き換えて、一度に挿入される複数の行を含む単一の SQL ステートメントを構築します。 。このアプローチを利用することで、パフォーマンスが大幅に向上します。

サンプル コード

最適化されたコードを以下に示します。

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 秒に短縮され、93% の驚くべきパフォーマンスの向上が実証されました。

追加の考慮事項

  1. セキュリティ: コードを防ぐために MySqlHelper.EscapeString を追加しました。インジェクション。
  2. チューニング: バッチ サイズを調整し、データベース インデックスを最適化することで、パフォーマンスをさらに微調整できます。

結論

この一括挿入手法を実装することにより、開発者は MySQL データベース挿入操作の効率を大幅に向上させることができます。この方法により、挿入時間が短縮され、全体的なパフォーマンスが向上し、追加されたセキュリティ対策によりデータの整合性が確保されます。

以上がMySQL への行の超高速一括挿入を実現するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート