有沒有一種方法來優化以下查詢。大約需要11秒:優化複雜GROUP BY查詢的性能
SELECT
concat(UNIX_TIMESTAMP(date), '000') as datetime,
TRUNCATE(SUM(royalty_price*conversion_to_usd*
(CASE WHEN sales_or_return = 'R' THEN -1 ELSE 1 END)*
(CASE WHEN royalty_currency = 'JPY' THEN .80
WHEN royalty_currency in ('AUD', 'NZD') THEN .95 ELSE 1 END))
,2) as total_in_usd
FROM
sales_raw
GROUP BY
date
ORDER BY
date ASC
做一個解釋,我得到:
1 SIMPLE sales_raw index NULL date 5 NULL 735855 NULL
這是一個聚合。因爲沒有WHERE子句,所以沒有什麼可做的,只是掃描整個表。在這種情況下,這是I/O性能和CPU性能問題(針對您的表達式)。你可以過濾一組(索引)日期,所以你只需要閱讀表的一部分? – 2013-04-03 19:35:14
@NWest謝謝你的回覆。你能舉個例子說明你的意思是「過濾一組索引日期」嗎? – David542 2013-04-03 19:47:14