0

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

SELECT time, price, amount FROM MtgoxTrade;

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

  1. 复合索引会对此有所帮助吗?请注意,我的 SQL 查询没有WHERE子句
  2. 可以进行任何其他优化来提高这里的查询性能吗?

更新:很抱歉 MtgoxTrade 表共有 6 个字段:(id、time、price、amount、type、tid)。我的 SQL 只需要查询三个字段(时间、价格、金额)。而且我已经尝试在(时间,价格,金额)上添加综合指数,但似乎没有帮助。

4

1 回答 1

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);
于 2013-09-22T11:05:45.813 回答