Matlab Connector / J真的很慢;直接运行查询要快得多

时间:2013-08-23 13:10:07

标签: mysql matlab

我需要重复运行大型查询并在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);

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

1 个答案:

答案 0 :(得分:0)

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

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