2011-12-01 53 views
0

我試圖實現一個非常快速的表,旨在存儲用戶之間的關係。MySql,引擎內存,這個簡單表所需的索引?

CREATE TABLE IF NOT EXISTS `friends_ram` (
`a` varchar(16) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL, 
`b` varchar(16) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL 
) ENGINE=MEMORY DEFAULT CHARSET=latin1; 
INSERT INTO friends_ram (a, b) 

我做了一些測試,以關係的大約500萬,它的速度極快,它佔用的RAM大約134MB;我的問題是,因爲查詢將是:

SELECT a WHERE b = 'foo'; 

SELECT b WHERE a = 'baar'; 

我想知道我是否應該使用合適的索引(增加所需的RAM大小)。

+1

只是告訴的方法是添加索引,看到內存使用情況是什麼,看什麼性能差異是。 2倍的內存使用量(組成一些數字)性能提高10%在我的書中不值得,但10倍速的2倍內存=好。 –

+0

顯然這是兩個指數的另一個61MB,我會用microtime做一些測試,看看有什麼收穫。但是從mysql CLI只有兩位小數,顯然它更快。我稍後會發布結果。 – sathia

回答

2

實際上,我感到羞恥的結果,

大概是我第一次做測試我誤解輸出。

原來,在ab上1000個沒有索引的隨機查詢需要1000次時間並且索引正確。嗯......

另一個非常重要的事情要注意的是,我試着用memcached。雖然存儲數據需要更長的時間,但檢索速度更快。也消耗更少的內存。

mysql 192MB -> Mysql MEMORY engine did it in; 0.50138092041016 seconds 
memcached 76MB -> Memcache engine did it in; 0.34592795372009 seconds 
memcached compressed: 45.4 MBytes -> Memcache engine did it in; 0.31583189964294 seconds 

所以,如果你需要存儲簡單的事情,如這些,我建議的memcached(壓縮)