mysql查询ohlc性能

时间:2013-11-25 20:43:36

标签: mysql performance

好吧也许有人已经问过这个问题,但我还是找不到任何帮助。 我有一个MySQL交易表,其中包含一些看起来像这样的历史数据:

+----+------------+---------+--------+-----------+------------+-----+----------------+
| id | date       | price   | amount | price_int | amount_int | tid | price_currency |
+----+------------+---------+--------+-----------+------------+-----+----------------+
| 1  | 1279408157 | 0.04951 | 20     | 4951      | 2000000000 | 1   | USD            |
+----+------------+---------+--------+-----------+------------+-----+----------------+

+------+------------+---------+------------+
| item | trade_type | primary | properties |
+------+------------+---------+------------+
| XXX  | market     | Y       | limit      |
+------+------------+---------+------------+

我正在尝试查询表格,得到类似的结果:

+-------------+-------+---------+---------+---------+---------+--------+-----------+
| day         | count | O       | H       | L       | C       | V      | AV        |
+-------------+-------+---------+---------+---------+---------+--------+-----------+
| 2013-11-25  | 30    | 0.04951 | 0.05321 | 0.04935 | 0.04963 | 8.5246 | 255.73800 |
+-------------+-------+---------+---------+---------+---------+--------+-----------+

现在我提出了这个问题:

SELECT DATE(FROM_UNIXTIME(`date`)) AS `day`,
    COUNT(*) AS `tot`,
    SUBSTRING_INDEX(GROUP_CONCAT(CAST(`price_int` AS CHAR) ORDER BY `date`), ',', 1 ) as `O`,
    MAX(`price_int`) AS `H`,
    MIN(`price_int`) AS `L`,
    SUBSTRING_INDEX(GROUP_CONCAT(CAST(`price_int` AS CHAR) ORDER BY `date` DESC), ',', 1 ) as `C`,
    SUM(`amount`) AS `V`
    AVG(`amount`) AS `AV`
FROM   `trades`
WHERE `primary`='Y'
GROUP BY DATE(FROM_UNIXTIME(`date`))
ORDER BY `day`  ASC

现在,我的问题在于性能:我得到13.9531秒来查询2,559,116行。此外,我还没有收集所有数据,我估计最终表将在5-6百万左右。

有更好的方法来编写查询吗?或者某种缓存或解决方法可以获得更好的时机?

0 个答案:

没有答案