1
我需要優化此查詢:優化MySQL的GROUP BY查詢
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擴展輸出:
+------+-------------+-------+-------+--------------------------------+-------------+---------+-------------------------+-------+----------+-------------+
| 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 |
+------+-------------+-------+-------+--------------------------------+-------------+---------+-------------------------+-------+----------+-------------+
有在計算器的一些重大問題爲一個表GROUP BY優化(如:https://stackoverflow.com/a/11631480/1320081),但我真的不知道如何根據JOIN-以優化查詢編輯表。
我該如何加快速度?
如何(id_currency,id_currency_source,buy_rate)?實際上最好的選擇不是取決於每個id_currency,id_currency_source組合的平均有多少個不同的日期和費率? – Frazz
@GordonLinoff'currency_rate(id_currency,id_currency_source,rate_date,buy_rate)'在我的情況下是最好的,它加速了我的查詢從〜0.5 s到〜0,075 s,當其他索引(包括@Frazz提到的一個)縮短執行時間到0,145秒。 –
好。請記住,如果數據庫總體發生顯着變化,您可能需要重新測試。我的意思是......尤其是如果你正在使用一個測試數據庫,請注意生產數據庫中的東西可能會有所不同。 – Frazz