2012-02-24 107 views
0

我有一个MySQL的MyISAM表约400万行的价格数据(7GB数据+ 9GB指数)与3列:多列索引或者时间序列MySQL表多个索引?

CREATE TABLE `prices` (
    `ts` datetime NOT NULL, 
    `id` int(10) unsigned NOT NULL, 
    `price` double NOT NULL, 
    PRIMARY KEY (`ts`,`instrid`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1$$ 

不同id S的(我觉得基数是这个词)的数量〜 500和用于大多数感兴趣的时间段,那些时间范围内,的id基数是低级〜20(所以有3月1日和第二之间只有20个左右不同的ID)。

的查询是几乎完全的形式为:

select ts, price from prices where ts between {t1} and {t2} and id = {id}. 

好像有些指数(S)应该加快速度。

tsid上的组合索引或tsid上的单独索引更好吗?一些第三选择?我也希望能提供一些建议,让我可以学习如何为自己回答这个问题。

会的另一个表类型(InnoDB的?)更适合我的目的是什么?

回答

3

我会去的TS,价格和id一个联合索引 - 通常的MySQL做两次手术,第一次发现使用索引行,然后从数据库检索行。但是,如果你把所有的数据的索引,然后它会简单地直接从索引抓取数据,而不从数据库中检索行。这被称为“覆盖指数”。

对数据库的选择,大多数人似乎InnoDB的建议进行认真使用,有一个很好的比较here

+1

同意。使用以下顺序的'(ts,id,price)'列覆盖索引。 – 2012-02-24 22:10:43

+0

一个有趣的解决方案。我会试试看看那篇文章。谢谢:) – 2012-02-24 23:16:00

+0

你知道,如果这将是一个问题,如果该索引将不会装入内存? – 2012-02-26 01:24:33