2011-11-22 98 views
2

我正在使用包含多达30000条记录的InnoDB表。行更新频率与stock_quantity值。我需要做的是仅选择具有计划任务的最新更新行并通过WebService执行一些操作。在MySQL数据库中仅选择最近更新的行,数据量很大

只是试图了解哪些是最好的方式做到这一点,而不杀人的表现。我想在3个不同的解决方案:使用日期时间列,并更新其在各修改值

  1. 。然后选择date_col> NOW() - 20分钟的行。 (20分钟是频率crontab正在运行)
  2. 使用一个布尔列,并在每次修改该行时将该值设置为true。然后选择boolean_col为true的行。如果执行该任务,则将boolean_col的值设置为false。
  3. 使用第二个表来存储最近更新的列。在table_1中的每一行更新中,将该行复制到table_2。然后选择table_2中的所有行,执行操作并截断table_2。

无论如何,我很确定正确的解决方案没有列在那里...所以有没有人有一些很好的建议?谢谢。

回答

4

拳头可言,
30000的成绩并不是大...

我喜欢法1用一些额外的变化

  • 设置日期时间列默认on update current_timestamp
  • b uild此列

方法2将发生冗余写入的索引,并读取

方法3是糟糕的是,它几乎double x double写和读操作

+1

我同意你的使用方法# 1,但我想要指出的是,使datetime列成为一个索引,它现在会随时发生变化,然后会导致索引碎片化。但是,如果索引也按计划进行碎片整理和重建,这应该不是问题.. – Nonym

+0

@ajreal:谢谢你的建议!我已经在考虑'更新current_timestamp',但不是在索引处。那么,除了这3个之外没有更好的方法? – Luciano

+0

@Nonym:也谢谢你! :) – Luciano

1

我会亲自用你的选项2.

我会认真看一个跳跳虎如果该行被编辑的值设置为1。当然排除和更新只影响布尔列。

当boolean = 1时,我会有cron搜索表,返回列表处理文件,并在完成后将字段更新回0。

这将是我的方法,但正如您所说,可能有更好的方法。

另一个想法:您可能也想看看与跳跳虎更换您的cron和瓶坯您的cron不上记录更新可能工作的行动......