К сожалению, мне приходилось прибегать к подобной ерунде и раньше с MySQL. Если вы не можете просто извлечь индекс, и GROUP BY не работает быстрее (не уверен, почему это происходит, переходя к сообщению @Ben ..), вы можете попробовать сегментировать проблему, чтобы ее пакетировать.
Я бы по-прежнему работал в MySQL, скорее всего, это будет быстрее, чем все, что вы пишете сами или делаете в командной строке UNIX. Рассматривайте это так же, как материализованное представление или таблицу агрегации в DW. Один простой способ - создать пакетный скрипт, который выполнял бы SELECT DISTINCTS по небольшим диапазонам во второй таблице только с различными значениями (через MERGE или какой-либо другой механизм). Это более пакетный режим, но вы сталкиваетесь с теми же проблемами с производительностью, которые просто распределяются между заданиями. Вам придется поэкспериментировать с параметрами (размер партии). Если вы выполняете это в производственной среде, и люди ожидают получить все различные значения, как если бы они обращались напрямую к БД, было бы лучше иметь 3 таблицы: исходную, временную для текущего пакета и оперативная таблица с последними значениями и столбцом date_modified.