Surzhikov
@Surzhikov
Разработчик

Как ускорить вставку, если много индексов?

MySQL, таблица InnoDB.
В ней 37 столбцов; 23 млн записей (суммарно 13.2 ГиБ)

Из-за необходимость быстрого поиска ПО ВСЕМ столбцам таблицы (в этом смысл проекта) - пришлось допустить один из смертных грехов программиста - и почти на все поля сделать индексы. Итого получилось 18 простых индексов и 10 фуллтекст :(
Скорость извлечения данных - стала удовлетворительной. Но раз в неделю надо обновлять данные (примерно 10000 записей) - и это происходит мучительно долго.

Запросы на сохранение происходят быстро, но вставка индексов очень долго.
insert/update запрос присходит быстро, но через какое-то время начинается ошибка SQLSTATE[HY000] [2002] Connection refused. В итоге записи вообще не сохраняются.

Какие способы решить такую проблема?
  • Вопрос задан
  • 234 просмотра
Пригласить эксперта
Ответы на вопрос 2
zoonman
@zoonman
⋆⋆⋆⋆⋆
Чтобы решить эту проблему, нужно выбросить MySQL и использовать колоночные СУБД, которые разработаны специально для таких задач.
Смотрите в сторону Vertica, Cassandra, HBase.
Ответ написан
@Fortop
Tech/Team lead
Для начала определитесь насколько вам нужны все поля.
Какая селективность индексов по ним.
Ведется ли агрегация, или же это просто выборки по условиям...

Если основная задача это полнотекстовый поиск с сопутствующими документам атрибутами, то загоните это все в Sphinx
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы