我需要重复运行大型查询并在 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
是包含查询语句的字符串。