好吧也许有人已经问过这个问题,但我还是找不到任何帮助。 我有一个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百万左右。