Я полностью согласен со Станиславом здесь. Я думаю, что любая внешняя поисковая система, такая как http://lucene.apache.org/ или http://sphinxsearch.com/, будет быстрее на указанном вами размере коллекции.
Для ускоренного курса Sphinx я бы рекомендовал начать с простой настройки, описанной в http://astellar.com/2011/12/replacing-mysql-full-text-search-with-sphinx/
В вашем случае я бы добавил несколько вещей в упомянутую базовую настройку.
Используйте ранжированный запрос в исходной конфигурации, чтобы снизить нагрузку на MySQL при индексации и расширить sql_query с помощью шаблона начала / конца:
source my_source
{
...
sql_query_range = SELECT MIN(id), MAX(id) FROM table
sql_range_step = 1000
...
sql_query = SELECT id, ... FROM table WHERE id>=$start AND id <= $end
...
}
Это скажет Sphinx, чтобы он выбирал до 1000 документов на запрос MySQL вместо всех записей в таблице одновременно. Если у вас более 1 млн. Записей, у вас должна быть опция.
В вашем случае это зависит от количества памяти, которое у вас есть на коробке. Я бы также увеличил mem_limit индексатора до 512M ..1024M, чтобы индексирование работало быстрее.
Когда вы играете со Sphinx, вы можете захотеть переместить некоторые запросы из MySQL в сторону Sphinx, а также добавить не полнотекстовые поля в индекс Sphinx, чтобы выполнить поиск по геодистанциям или граненый поиск, как описано в http://sphinxsearch.com/docs/current.html#attributes