我必须在共享网站空间上将大约1600万条记录上传到MySQL 5.1服务器,这不允许LOAD DATA功能。该表是Innodb表。我还没有分配任何密钥。
因此,我使用Python脚本将我的CSV文件(大小为2.5 GB)转换为带有单独INSERT语句的SQL文件。我已经启动了SQL文件,这个过程非常慢,感觉每分钟处理1000-1500行!
与此同时,我阅读了有关批量插入的内容,但没有找到任何可靠的来源,告诉一个insert语句可以有多少条记录。你知道吗?
没有钥匙并稍后添加它们是否有利?
围绕所有插件的事务是否有助于加快进程?事实上,目前只有一个连接(我的)与数据库一起工作。
答案 0 :(得分:1)
如果使用insert ... values ...
语法插入运行单个请求的多个行,则查询大小受max_allowed_packet值限制,而不是行数。
关于键:在任何数据操作之前定义键是一个好习惯。实际上,当你构建一个模型时,必须想到键,关系,索引等。
最好在插入数据之前定义索引。 CREATE INDEX
在庞大的数据集上工作得非常慢。但推迟创建索引并不是一个巨大的劣势。
要使插入更快,请尝试启用autocommit模式,不要在表上运行并发请求。