Я реализующий кэш-памяти для таблицы, которая выглядит следующим образом (упрощенный):Наиболее эффективный запрос MySQL обновить таблицу из таблицы идентичны памяти
Элемент1 (целое число), Элемент2 (целое число), НСТ (Integer)
Оригинальная таблица включает в себя миллионы пар, подобных этому. и он быстро обновляется.
Чтобы сделать все это более эффективным, я хочу писать новые пары в идентичную таблицу памяти и периодически обновлять реальную таблицу на диске cron.
cron должен делать следующее: для каждой пары, если в таблице без памяти есть аналогичная пара, увеличивайте счетчик по счету из таблицы памяти. Если такая пара не существует, создайте ее со счетом из таблицы памяти.
Как я могу сделать флеш (от таблицы памяти до реальной таблицы) наиболее эффективным?
Примечания: Среда MySql 5.0.45 PHP 5.2.6 CentOS
Попытка изменить мой ответ, но кажется, что, поскольку я удалил anwser и восстановил его впоследствии, SO предотвращает дальнейшее редактирование (ошибка «не найдена»; возможно, проблема кэширования). ОБНОВЛЕНИЕ КНОПКИ ON DUPLICATE должно читать ON DUPLICATE KEY UPDATE cnt = cnt + VALUES (cnt), если cnt не всегда 1 в таблице памяти. –
Спасибо! оно работает. Однако мне что-то кажется странным. Решение, которое сработало для меня, - «INSERT INTO linked_items SELECT * FROM linked_items_mem как li_mem ON DUPLICATE KEY UPDATE linked_items.cnt = linked_items.cnt + li_mem.cnt;" Однако в моих тестах таблица памяти имеет 26 строк, но mysql говорит о 48 строках. Как так? – Nir
@Nir: Каждая операция INSERT и UPDATE подсчитывается отдельно. В вашем случае было 26 INSERT, из которых 22 потерпели неудачу и привели к 22 UPDATE, делая 26 + 22 = 48 операций. – Quassnoi