所以我有一个大表,有20多亿张记录,还有5个多列键。
有两种方法可以用于插入数据:
方法1
load data infile ...;方法2
alter table disable keys;
load data infile ...;
alter table enable keys;如果我从一个空表开始,对于20亿条记录,方法1大约需要60小时(估计可能更长),而方法2则需要12小时来插入数据,以及3小时重新创建密钥。到目前一切尚好。
然而,如果我已经有了20亿条记录,并试图再插入500万条,那么方法1大约需要3小时,而方法2则需要30分钟来插入数据,而重新创建密钥则需要7小时。我证实,在整个密钥再生过程中,它使用了Repair by sorting,所以它不像回到了Repair with keycache。
我不知道这是为什么。MySQL声称禁用键对于插入大容量数据非常好,但这显然取决于上下文。如果它要从零开始重新生成所有的键,为什么不需要大约3个小时,就像我从一个空表开始的时候一样?或者,如果一个接一个地插入键,为什么不花大约3个小时,这就是方法1所需的时间?
欢迎提出意见。
发布于 2011-03-04 10:02:14
发布于 2011-03-04 10:20:03
如果您正在处理数十亿条记录,并且使用MySQL 5.1或更高版本,那么您可能会发现分区会提高性能.在使用分区表中的索引时,也会对索引进行分区;而且由于每个索引只针对您的总数据的一个分区/子集构建,所以重构的排序开销应该大大减少。
发布于 2011-03-04 09:52:53
“不像承诺的那么快”--呃,你有5000000张唱片,当然比插入20张唱片还要长一点。
你所描述的速度是相当合理的IMHO -使用最快的方法。
https://stackoverflow.com/questions/5191959
复制相似问题