ホームページ  >  記事  >  データベース  >  パフォーマンスを向上させるために MySQL データベースの行挿入を最適化するにはどうすればよいですか?

パフォーマンスを向上させるために MySQL データベースの行挿入を最適化するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-26 10:30:10460ブラウズ

How Can I Optimize MySQL Database Row Insertion for Faster Performance?

効率的なパフォーマンスのための 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。