А почему MyISAM, а не выбран InnoDB, чтобы не лочить таблицу и можно было бы сделать partition таблицы например по месяц-год блоку, объем бы текущих данных сократился. Ну и время бы я не timestamp использовал, а например datetime.
Выносите 20 последних записей например в Redis (Memcache, в память, в файл на диске), а во фронте от туда уже и читайте, это мог бы быть и простой сериализованный массив в памяти, array_shift (array_push) и т.п. как со списком.
А дубликаты проверяйте сразу перед добавлением, каждые 20 минут же это не страшно.