有没有一种方法来优化以下查询。大约需要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