我有一个超过500M +记录的MySQL表MtgoxTrade(id,time,price,amount,type,tid)
,我需要从所有记录中查询三个字段(时间,价格,金额):
SELECT time, price, amount FROM MtgoxTrade;
它在Win7上花了110秒,这太慢了,我的问题是:
WHERE
子句更新:很抱歉,MtgoxTrade表共有6个字段:( ID,时间,价格,金额,类型,tid)。我的SQL只需要查询三个字段(时间,价格,金额)。我已经尝试在(时间,价格,金额)上添加综合指数,但似乎没有帮助。
答案 0 :(得分:4)
如果这是你真正的疑问 - 不,没有什么可能有用。来想一想 - 你要求提供整个500M +表的内容!无论你做什么都会很慢 - 必须处理整个表格。
如果您可以将程序逻辑限制为仅处理表的一些较小的子集,则可以使其更快。
例如,您只能使用WHERE
子句处理上个月的结果:
SELECT time, price, amount
FROM MtgoxTrade
WHERE time BETWEEN '2013-09-01' AND '2013-09-21'
这个可以工作得非常快,但您仍然需要在time
字段上添加索引,如下所示:
CREATE INDEX mtgoxtrade_time_idx ON mtgoxtrade (time);