0

我需要重复运行大型查询并在 Matlab 中存储/操作结果。我正在使用 Connector/J(mysql-connector-java-5.1.25 驱动程序)连接到 mySQL 服务器(位于我的本地计算机上)。我运行的查询创建了一个包含数据的 ~140 MB 元胞数组(我CREATE在这篇文章的底部包含了查询代码和表格代码)。执行此查询并创建元胞数组大约需要 10 秒。在 HeidiSQL 中运行相同的查询并显示所有结果只需要 0.2 秒。

当我在 Matlab 中运行一个简单select count(*) from (<current query>)的程序时(即,当我没有创建单元格数组来存储查询结果时),语句只需要 0.3 秒来执行,所以我相信在 Matlab 中经历的显着时间增加已经与将这么多数据写入元胞数组有关。

有什么方法可以在 Matlab 中加快这个过程?

我的代码:

我在 mySQL 中有下表(CREATE代码取自 HeidiSQL;一些字段名称已更改):

CREATE TABLE `data` (
    `PRIMARY` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
    `ID` VARCHAR(5) NULL DEFAULT NULL,
    `DATE` DATE NULL DEFAULT NULL,
    `PRICE` DECIMAL(14,4) NULL DEFAULT NULL,
    `QUANT` INT(10) NULL DEFAULT NULL,
    `TIME` TIME NULL DEFAULT NULL,
    INDEX `DATE` (`DATE`),
    INDEX `ID` (`SYMBOL`),
    INDEX `PRICE` (`PRICE`),
    INDEX `QUANT` (`SIZE`),
    INDEX `TIME` (`TIME`),
    PRIMARY KEY (`PRIMARY`)
)

它填充了大约 360,000 行数据。

我正在运行的查询是:

Select ID, DATE, PRICE, QUANT, TIME FROM database.data WHERE DATE 
>= "2007-01-01" AND DATE <= "2010-12-31" ORDER BY ID, DATE, TIME ASC; 

这将返回大约 260,000 行。顺便说一句,删除ORDER BY语句不会加快查询速度。

在 Matlab 中,我使用以下代码执行查询并存储结果:

MyCellArray = fetch(dbConn, IntradayQUERY);

wheredcConn是数据库连接对象,IntradayQUERY是包含查询语句的字符串。

4

1 回答 1

0

尝试是增加fetch函数中的行增量。这减少了 Matlab 从结果中提取数据的次数,也减少了所需的内存重新分配量。默认值为 1280。我会大得多,直到您的计算机内存不足。尝试 10,000、100,000 甚至 500,000。如果您开始耗尽内存,请考虑选择更少的列(当然,在您的应用程序允许的情况下)。

例如,替换MyCellArray = fetch(dbConn, IntradayQUERY);MyCellArray = fetch(dbConn, IntradayQUERY, 100000);并查看会发生什么。

于 2013-08-23T16:09:51.110 回答