我有一个巨大的索引MySQL表(~300-400 GB),我需要不时添加新条目(新数据大约需要10-20 GB)。包含新数据的原始文件可能包含错误,这些错误只能手动修复,并且仅在处理脚本到达时才可见。此外,只有在完成原始数据的完整处理后,才能在主数据库中提供新数据。因此,为了不搞砸主表,我决定采用以下工作流程:
该脚本创建的临时表的结构与主表相同并填充它。
完成并验证后,临时表将插入主表:
INSERT INTO main_table (all_fields_except_primary_key) SELECT all_fields_except_primary_key FROM new_table;
这个过程非常慢,据我所知,由于索引新结果。
我已经读过,插入索引表一般非常慢,一些专业人士在插入大量数据然后再次索引之前建议DROP INDEX'es。但是由于整个表的这种巨大的数据索引很长(比我的天真的INSERT INTO ... SELECT ...长得多)而且更重要的是,主表几乎不能在它期间使用(没有索引SELECTS需要很长时间)
所以我想在插入之前索引temprory表(因为它非常快),然后合并两个索引。
在MySQL中有可能以某种方式吗?
另一个问题:我的任务可能还有另一种解决方法吗?