我正在尝试实现一个非常快速的表,用于存储用户之间的关系。
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大小)。
答案 0 :(得分:2)
我实际上对结果感到羞耻,
可能是我第一次进行测试时误读了输出。
事实证明,对于a
或b
上没有索引的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(压缩)