我正在使用MySQL v5.6。
我在新创建的表(InnoDB)中插入大约1000万行。我尝试在“加载数据InFile”和多个插入之间选择最佳方法。
加载数据InFile应该(并且更高效),但我观察到一个奇怪的事情:使用“加载数据infile”时索引创建要长得多(15%)......
步骤观察(每个步骤在前一个步骤完成时开始):
有什么可以解释的?
(当然,结果与订购的步骤2,1,4,3,6,5相同。)
答案 0 :(得分:0)
使用INSERT加载数据可能会导致更多数据页面占用缓冲池。在使用LOAD DATA的表上创建索引时,它首先必须将页面从磁盘加载到缓冲池中,然后将数据索引到其中。
您可以在加载数据后通过查询来测试:
SELECT table_name, index_name, COUNT(*)
FROM INFORMATION_SCHEMA.INNODB_BUFFER_PAGE
WHERE table_name IN ('`mydatabase`.`table_1`', '`mydatabase`.`table_2`')
GROUP BY table_name, index_name;
然后在构建索引后再次执行此操作。
(当然用你在这些表中创建的数据库的名称替换mydatabase
。)