管理从大表中查询,这需要花费很多时间来更改/更新

时间:2017-01-13 10:32:53

标签: mysql

我有一张非常庞大的桌子"table1",我一整天都在不停地查询(24x7)

在一天结束时发生的事情是在12.AM,我运行一个alter "table1" at row level的查询。此活动大约需要3-4个小时,直到我更新的"table1"完成创建。

但直到那时我还想从"table1"查询。

所以我决定创建两个表。 "table1_active" and "table1_passive"

通常在白天我将从"table1_passive"进行查询,在我更新“table1_active”后,我应该从"table1_passive"切换查询 到"table1_active"

这种转换应该每天进行,这样我一整天的查询都不应该妨碍。

我不知道有没有更好的方法来实际设置触发器,或者有人可以建议我这样做的方法吗?

1 个答案:

答案 0 :(得分:0)

根据我的经验,使用像table1_passive这样的辅助表是有风险的。在更新过程完成时,您完全不知道(据我所知),因此您不知道何时应该在table1_passivetable1_active之间切换查询。

有几种方法可以改善您桌面的更新过程,但必须记住,如果table1不断增长,那些临时解决方案:

  • 使用MyISAM作为存储引擎。 Here是关于改进MyISAM表更新的非常好的文章。

  • 如果要根据where子句更新table1,可以使用indexes帮助数据库引擎查找哪些记录必须更新。

  • 请考虑使用partitions更快地处理您的表格。

  • 如果你有两张桌子,你可以:

    1. table1_active上创建Unique_Index并设置ON DUPLICATE KEY UPDATE
    2. 更新table1_passive
    3. table1_active中使用bulk insert来加快进程,数据库将根据您的条件确保没有重复的行。

但是,如果你整天都在查询,并且桌子不断增长,我建议使用NoSql,因为问题就在那里,即使你现在优化了更新过程。

如果我们知道你正在使用的表结构和更新查询,我们可以帮助你更好;)

问候并祝你好运!