如何对巨大的MySQL表进行性能调优?

时间:2013-09-22 10:53:59

标签: mysql sql database performance

我有一个超过500M +记录的MySQL表MtgoxTrade(id,time,price,amount,type,tid),我需要从所有记录中查询三个字段(时间,价格,金额):

SELECT time, price, amount FROM MtgoxTrade;

它在Win7上花了110秒,这太慢了,我的问题是:

  1. 复合索引会对此有所帮助吗?请注意,我的SQL查询没有WHERE子句
  2. 可以在此处进行任何其他优化以提高查询性能吗?
  3. 更新:很抱歉,MtgoxTrade表共有6个字段:( ID,时间,价格,金额,类型,tid)。我的SQL只需要查询三个字段(时间,价格,金额)。我已经尝试在(时间,价格,金额)上添加综合指数,但似乎没有帮助。

1 个答案:

答案 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);