我对使用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。
答案 0 :(得分:2)
报告的行为似乎与表的大小增加以及UPDATE
语句的低效查询执行计划一致。最有可能的解释是UPDATE
正在执行全表扫描以查找要更新的行,因为没有适当的索引。并且随着表中添加的行越来越多,执行全表扫描所需的时间越来越长。
快速推荐:
查看查询执行计划(通过运行EXPLAIN获得)
验证合适的索引是否可用且正在使用
除此之外,还有MySQL实例本身的调整。但这取决于表所使用的存储引擎,MyISAM,InnoDB等。
答案 1 :(得分:0)
请为这两个表和实际声明提供SHOW CREATE TABLE
。以下是一些猜测...
innodb_buffer_pool_size
太小了,缓存成了问题。UPDATE
似乎是全表更新。好吧,每次都有更大的表格。startID
)之前,您是如何从一个查询中获取id>=startID
的?当你进一步深入表格时,这个代码可能会变慢。INSERT...SELECT
作为“循环”?