优化在MySQL中合并巨大的表

时间:2012-09-02 13:29:04

标签: mysql select insert merge

我有一个巨大的索引MySQL表(~300-400 GB),我需要不时添加新条目(新数据大约需要10-20 GB)。包含新数据的原始文件可能包含错误,这些错误只能手动修复,并且仅在处理脚本到达时才可见。此外,只有在完成原始数据的完整处理后,才能在主数据库中提供新数据。因此,为了不搞砸主表,我决定采用以下工作流程:

  1. 该脚本创建的临时表的结构与主表相同并填充它。

  2. 完成并验证后,临时表将插入主表:

    INSERT INTO main_table (all_fields_except_primary_key) SELECT all_fields_except_primary_key FROM new_table;
    
  3. 这个过程非常慢,据我所知,由于索引新结果。

    我已经读过,插入索引表一般非常慢,一些专业人士在插入大量数据然后再次索引之前建议DROP INDEX'es。但是由于整个表的这种巨大的数据索引很长(比我的天真的INSERT INTO ... SELECT ...长得多)而且更重要的是,主表几乎不能在它期间使用(没有索引SELECTS需要很长时间)

    所以我想在插入之前索引temprory表(因为它非常快),然后合并两个索引。

    在MySQL中有可能以某种方式吗?

    另一个问题:我的任务可能还有另一种解决方法吗?

0 个答案:

没有答案