2010-10-27 48 views
4
  • 让假设你有100万行和不断增长的表...
  • 你运行一个python PROGRAMM每一天的每五分钟必须更新某些字段50K行

我的问题是:做这项工作的最快方法是什么?什么是更新在MySQL几千行的最快方法

  • 在循环中运行这些更新,并在执行最后一个更新后启动游标提交?
  • 或生成文件,并通过命令行运行它?
  • 通过巨大而又快速的插入创建临时表,然后对生产表运行一次更新?
  • 做准备报表?
  • 将每次执行更新分割为1K更新,以生成较小的日志文件?
  • 在运行更新时关闭日志记录?
  • 或在MySQL examples做一个案例(但这只能达到255行)

我不知道......已经有人做这样的事情?最佳做法是什么?我需要尽可能快地运行它...

+0

如何关于阅读?数据库读取%90时间或数据库仅用于保存信息并写入%90时间,并读取%10时间? – nerkn 2010-10-27 09:50:30

回答

4

这里,你可以加快你的UPDATES一些方法。

当你UPDATE,表中的记录只是被改写新数据。所有这些都必须在INSERT上再次完成。这就是为什么你应该总是使用INSERT ... ON DUPLICATE KEY UPDATE而不是REPLACE

前者是一个关键违反情况下UPDATE操作,而后者是一个DELETE/INSERT

下面是关于这here一个例子INSERT INTO table (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE c=c+1;更多。

UPDATE1:这是一个好主意,可以在单个查询中完成插入操作。这应该加快你的UPDATES。请参阅here关于如何做到这一点。

UPDATE2:现在我有机会阅读您的其他子问题。这是我知道 -

  • ,而不是在一个循环中,尝试在单个SQL &单个提交执行所有UPDATE
  • 不知道这会有什么不同。 SQL查询更重要。
  • 现在,您可以尝试一下。基准。这种事情取决于您所拥有的TABLE & INDEXES的大小,再加上INNODB or MYISAM
  • 不知道这件事。
  • 请参阅第一点。
  • 是的,这可能会稍微加快你的速度。另请参阅您是否打开了slow_query_log。这会将所有慢速查询记录到单独的日志文件中。也关掉这个。
  • 再次。请参阅第一点。
+0

好吧,谢谢你,但你想如何更新单个SQL中的50K行? – nabizan 2010-10-27 11:14:27

+0

编写代码为你创建'SQL' :) – 2010-10-27 11:34:55

0

查询的执行过程:服务器第一解析您的查询,然后执行,你需要分析
查询

然后服务器需要更少的时间来分析,然后他执行得更快,而不是缓慢其他方式

相关问题