【发布时间】:2017-03-18 17:38:35
【问题描述】:
我需要优化这个查询:
SELECT
cp.id_currency_purchase,
MIN(cr.buy_rate),
MAX(cr.buy_rate)
FROM currency_purchase cp
JOIN currency_rate cr ON cr.id_currency = cp.id_currency AND cr.id_currency_source = cp.id_currency_source
WHERE cr.rate_date >= cp.purchase_date
GROUP BY cp.id_currency_purchase
现在大约需要 0.5 秒,这对我来说太长了(它要么经常更新,所以查询缓存对我没有帮助)。
这是 EXPLAIN EXTENDED 输出:
+------+-------------+-------+-------+--------------------------------+-------------+---------+-------------------------+-------+----------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+------+-------------+-------+-------+--------------------------------+-------------+---------+-------------------------+-------+----------+-------------+
| 1 | SIMPLE | cp | index | id_currency_source,id_currency | PRIMARY | 8 | NULL | 9 | 100.00 | |
| 1 | SIMPLE | cr | ref | id_currency,id_currency_source | id_currency | 8 | lokatnik.cp.id_currency | 21433 | 100.00 | Using where |
+------+-------------+-------+-------+--------------------------------+-------------+---------+-------------------------+-------+----------+-------------+
stackoverflow 上有一些关于一个表 GROUP BY 优化的好问题(例如:https://stackoverflow.com/a/11631480/1320081),但我真的不知道如何优化基于 JOIN 的表的查询。
如何加快速度?
【问题讨论】:
标签: mysql sql optimization group-by