2012-02-24 146 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