MySql,Engine Memory,这个简单表所需的索引?

时间:2011-12-01 14:50:28

标签: mysql heap-memory

我正在尝试实现一个非常快速的表,用于存储用户之间的关系。

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)

我用约5M的关系进行了一些测试,它的速度非常快,占据了大约134MB的内存;我的问题是,因为查询将是:

SELECT a WHERE b = 'foo';

SELECT b WHERE a = 'baar';

我想知道我是否应该使用正确的索引(增加所需的RAM大小)。

1 个答案:

答案 0 :(得分: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(压缩)