MySql, Engine Memory, индекс, необходимый для этой простой таблицы? - PullRequest
0 голосов
/ 01 декабря 2011

Я пытаюсь реализовать очень быструю таблицу, предназначенную для хранения отношений между пользователями.

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, и он быстро светится и занимает около 134 МБ ОЗУ; мой вопрос, так как запросы будут:

SELECT a WHERE b = 'foo';

или

SELECT b WHERE a = 'baar';

Я хотел бы знать, должен ли я использовать правильное индексирование (увеличение требуемого объема ОЗУ).

1 Ответ

2 голосов
/ 01 декабря 2011

Мне на самом деле стыдно за результаты,

Возможно, в первый раз, когда я сделал тесты, я неправильно прочитал вывод.

Оказывается, что при 1000 случайных запросах без индекса на aили b требуется 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 (сжатый)

...