как избавиться от накладных расходов?
Вы можете принудительно заставить таблицу, используя механизм хранения MEMORY / HEAP, восстановить остаточное пространство, потерянное из удаленных строк, изменив его, но не изменив его.меняя что-либо.например,
ALTER TABLE my_table ENGINE=MEMORY;
Перезапишет таблицу.Подкрепите это цитатой из документации :
Чтобы освободить память, используемую удаленными строками, используйте ALTER TABLE ENGINE = MEMORY для принудительного перестроения таблицы.
РЕДАКТИРОВАТЬ
может быть, это не лучший тип таблицы для этого?
Это не такПо моему мнению, это звучит как идеальное применение таблицы MEMORY - по большому счету, я считаю ее устаревшим движком.Некоторые размышления
Во-первых, таблицы MEMORY не могут / не используют индексы b-дерева (только хеш-индексы), поэтому запросы, которые в противном случае могли бы использовать индекс для ORDERing или ранжирования (то есть <,> операции) прибегают к сортировке / фильтрации вручную / исчерпывающе.
Во-вторых, таблицы Innodb будут находиться в оперативной памяти, если ваш innodb_buffer_pool достаточно велик и работает лучше с параллельными потоками, поэтому он часто работает так же хорошо, если не лучше, чем таблица MEMORY для большинства приложений.
В-третьих, возможно, самое главное, если ваш MySQL когда-либо будет выключен, вы потеряете все данные в вашей таблице.Существуют также последствия усечения таблицы, если вы используете репликацию.