gpt4 book ai didi

matlab - 从 SQL 数据库 : 2 mil rows takes 30 sec, 将数据导入 MATLAB 但 600 万需要 21 分钟?

转载 作者:行者123 更新时间:2023-11-29 13:23:28 25 4
gpt4 key购买 nike

我可以在大约 36 秒内使用 Matlab 的数据库工具箱导入 200 万行。如何在 20 分钟内导入 600 万行数据?

下面查询的最后提取步骤大约需要 36 秒。

q = 'select ... from mytable limit 2000000'; %notice 2 mil limit
result = exec(conn, q);
final_result = fetch(result); % Takes about 36 seconds.

我的整个表有 6,097,227 行。 但如果我这样做:

q = 'select ... from mytable';
result = exec(conn, q);
final_result = fetch(result);

MATLAB 在最后的提取步骤中完全失去了它! CPU 使用率达到大约 500-600%(即正在使用 6/8 个内核),并且需要很长时间。目前,它设置为以 10k 批处理获取,最终在 21 多分钟内完成。

想法?怎么办? 我真的很费力地想看看这在行数上至少是如何不是大致线性的。我是不是越过了一些奇怪的限制?

顺便说一句:在使用 PostgreSQL 驱动程序等的 R 中,整个查询和导入到 R 中大约需要 43 秒......并且 0 摆弄。我可以在类似的时间内使用 ODBC 导入 Stata。

注意:在上面的查询中,... 是 10 个左右的数值变量:一些是整数,一些是 double 。都不是文字。

最佳答案

这是对像这样的大型进口的一般战略提出建议。如果您使用的任何组件未能遵循它,那么您自然会遇到问题。

首先,根据记录的平均大小分批导入 1,000 到 10,000 条记录。

其次,用单个多行INSERT插入每个批处理:

INSERT INTO TABLE(columns...) VALUES (first-insert values), (second-insert values),...

即将每个批处理的所有记录连接成一个多行插入并以这种方式执行。它将极大地节省 IO。

关于matlab - 从 SQL 数据库 : 2 mil rows takes 30 sec, 将数据导入 MATLAB 但 600 万需要 21 分钟?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37798902/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com