Если у вас есть 1M файлов для просмотра, вы (насколько я знаю) просматриваете каждый из них с регулярным выражением.
Для всех намерений и целей, вы собираетесь в конечном итогеделать то же самое со строками таблицы, если вы выполняете массовый запрос к ним, используя оператор LIKE или регулярное выражение.
Мой собственный опыт работы с grep заключается в том, что я редко ищу что-то, что не содержит хотя бы одного полного словаоднако, таким образом, вы можете воспользоваться базой данных, чтобы уменьшить набор, в котором вы ищете.
MySQL имеет встроенные функции полнотекстового поиска, но я бы рекомендовал, потому что они означают, что вы 'Вы не используете InnoDB.
Вы можете прочитать о них из Postgres здесь:
http://www.postgresql.org/docs/current/static/textsearch.html
После создания индекса для столбца tsvector, вы можете выполнить "grep "в два шага, один для немедленного поиска строк, которые могут иметь неопределенную квалификацию, а затем другой по вашим истинным критериям:
select * from docs where tsvcol @@ :tsquery and (regexp at will);
Это будет значительно быстрее, чем все, что может сделать grep.