mySQL - 插入数据的时间很慢

时间:2016-03-28 03:45:19

标签: c# mysql performance

我对使用C#的程序性能有疑问。

在第一个循环中,该表将插入并更新175000条记录,时间为54秒。 在第二个循环中,有175000条记录,1分11秒。 接下来,第三个循环,18195 1分28秒。 循环继续,所需的时间更长,125条记录最多可达2分钟。

我想知道为什么较小的记录需要更长的时间来更新?更新记录的数量是否不会影响完成循环所需的时间?

有谁可以启发我这个?

计划流程:

插入表A(日期,时间)从rawdatatbl选择日期,时间,其中id> = startID&& ID&LT = maxID; // startID是最后记录的下一个ID

更新TableA set columnName = values,columnName1 = values,columnName2 = values,columnName .....

我正在使用InnoDB。

2 个答案:

答案 0 :(得分:2)

报告的行为似乎与表的大小增加以及UPDATE语句的低效查询执行计划一致。最有可能的解释是UPDATE正在执行全表扫描以查找要更新的行,因为没有适当的索引。并且随着表中添加的行越来越多,执行全表扫描所需的时间越来越长。

快速推荐:

查看查询执行计划(通过运行EXPLAIN获得)

验证合适的索引是否可用且正在使用

除此之外,还有MySQL实例本身的调整。但这取决于表所使用的存储引擎,MyISAM,InnoDB等。

答案 1 :(得分:0)

请为这两个表和实际声明提供SHOW CREATE TABLE。以下是一些猜测...

  • 目标表包含索引。由于索引是在插入发生时构建的,因此任何“随机”索引都会变得越来越慢。
  • innodb_buffer_pool_size太小了,缓存成了问题。
  • UPDATE似乎是全表更新。好吧,每次都有更大的表格。
  • 在执行下一个查询(具有startID)之前,您是如何从一个查询中获取id>=startID的?当你进一步深入表格时,这个代码可能会变慢。
  • 你说“在第二个循环中”,“循环”在哪里?或者你指的是INSERT...SELECT作为“循环”?