【问题标题】:Speed ​query update mysql [closed]速度查询更新mysql [关闭]
【发布时间】:2019-11-09 21:59:08
【问题描述】:

我必须更新放置在包含大约 1500 条记录的在线 mysql 数据库中的表的大约 400 条记录。 我在每个周期执行一个带有 UPDATE 查询的周期,但更新时间约为 1 分钟。 建议我如何加快更新速度。

注意: - 我已经索引了表格; - 代码在 C# 中;

【问题讨论】:

  • 你能添加更多关于表格、字段、C#代码等的信息吗?
  • 更新表中的单行应该不需要一分钟。更新 400 行应该不需要一分钟。需要更多信息。

标签: c# mysql sql


【解决方案1】:

为每个循环生成以分号结尾的动态查询字符串

例子:

string sqlQuery = null; // Or use StringBuilder for better memory performance
foreach(var cycle in Cycles){
  // Your scenario gone here
   sqlQuery += "UPDATE YourTable SET Columns = Values ; \n";
}

之前的代码只会一起执行所有更新语句! 批量更新

我在处理 BLOB 或从循环或控件等生成的许多查询时使用动态字符串生成。在单个语句中一起更新会很快。

   // BLOBS
    if (Configuration.StoreObjectsAsBinary)
    {
        foreach (var BLOB in BLOBS)
          CommandText += $"INSERT INTO General.BLOB(SystemID, BinaryValue) 
                           VALUES({SystemID} {BLOB.Value}); \n";
    }
 // Note the  Escapse character is important, and semicolon is must or try your luck.

使用Dapper ORM 以获得更好的性能或执行查询

或 Legacy ADO.NET 以提高可维护性和可读性

using(var conection = new SqlConnection(""))
{ 
   connection.Open();
   using(var cmd = new SqlCommand("UPDATE QUERY", connection))
   {
     cmd.ExecuteNonQuery();    // Or better use Async version with await
   }
}

注意 using 语句对于再次连接到 ConnectionPooling 很重要

【讨论】:

  • 非常好,将时间缩短到几秒钟。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-09
  • 2012-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多