我有一个InnoDB表,该表包含历史上多年的数据以及将来的数据。我需要定期更新该表,以便从可用的第三方来源添加数据。

因此,我按年份对表进行了分区(p2004 ... p2018)

该表还在许多字段上建立了索引。

要更新,我正在执行以下操作:


  (1)截断分区p2018
  
  (2)LOAD DATA INFILE ...(仅包含2018年数据的文件)...


该表的定义清楚地表明,2018年数据仅位于分区p2018中(我已经通过原始数据文件上的时间戳验证了分区)。

我的问题是:LOAD DATA INFILE命令完成时(或期间),是否会将p2018中放置的数据编入索引?还是我需要发出另一个命令来索引p2018中的数据?如果是这样,命令

ALTER TABLE tablename REBUILD PARTITION p2018

正确的命令?

我花了大约20分钟的时间进行谷歌搜索(包括StackExchange),但在此方面找不到很好的指导。

最佳答案

作为mysql doc

LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name'
    INTO TABLE tbl_name
   [PARTITION (partition_name [, partition_name] ...)]
    ....


您只需要提到分区名称,例如:

LOAD DATA INFILE 'p2018.csv'
INTO TABLE tbl_year
PARTITION 'p2018'
...


告诉我们您是否需要更多信息。

09-18 02:20