所以我有一个大表,有超过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所花费的?
欢迎评论
答案 0 :(得分:1)
所花费的时间可能会有很大差异。
http://www.mysqlperformanceblog.com/2007/07/05/working-with-large-data-sets-in-mysql/
答案 1 :(得分:1)
如果您正在处理数十亿条记录,并使用MySQL 5.1或更高版本,那么您可能会发现partitioning将有利于提高性能......在分区表中处理索引时,索引也会被分区;并且因为每个索引仅针对总数据的分区/子集构建,所以重建的排序开销应该显着减少。
答案 2 :(得分:0)
“没有承诺的那么快” - 呃,你有5000000条记录,当然它比插入20条记录需要一点。
你所描述的速度非常合理恕我直言 - 只需使用最快的方法。