时间序列表的多列索引还是多个索引?

时间:2012-02-24 21:46:13

标签: mysql indexing query-optimization time-series

我有一个MySQL MyISAM表,有大约4亿行价格数据(7GB数据+ 9GB索引),有3列:

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日到2日之间只有20个左右的不同ID)。

查询几乎完全是以下形式:

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

似乎某些索引应该加快速度。

tsid上的综合索引或tsid上的单独索引会更好吗?第三种选择?我也很感激建议我可以学习如何为自己回答这个问题。

另一种表类型(InnoDB?)是否更适合我的目的?

1 个答案:

答案 0 :(得分:3)

我会在ts,price和id上使用单个组合索引 - 通常MySQL会执行两个操作,首先它使用索引查找行,然后从数据库中检索该行。但是,如果您拥有索引中的所有数据,那么它将直接从索引中获取数据,而无需从数据库中检索该行。它被称为“覆盖指数”。

在数据库选择上,大多数人似乎都推荐使用InnoDB进行认真使用,这是一个很好的比较here