Портится индекс при добавлении 100К+ строк в таблицу

Trike

Новичок
Портится индекс при добавлении 100К+ строк в таблицу

Здравствуйте.

Сторонняя программа напрямую добавляет в таблицу данные - за раз 100-300 тысяч строк вида int,int,int,int,float (все int поля - индексные)
Эти данные выбираются составным запросом. При обычной выборке затрагивается 20-30 строк из этой таблицы по ключу.

Пока таблица была размером до 1 млн строк - индекс был в порядке. После очередного добавления, запрос на хостинге начал виснуть - explain показал, что выбираются все 1,5 млн строк без ключа.
Сделал дамп базы и восстановление из дампа - запрос начал работать нормально. Добавились еще 100 тыс. строк - опять выборка выдает все строки из этой таблицы.
Попробовал optimize таблицу - не помогло, физический размер индекса только уменьшился в 2 раза, repair тоже не дал результата.
На локальном сервере размер индекса этой таблицы - 70Мб, на хостинге - 18Мб.

Подскажите, пожалуйста, с чем может быть связана порча индекса, и как это вылечить (кроме дампа и восстановления после каждого добавления строк).

Mysql 5.0.33
 

Gas

может по одной?
если myisam engine, попробуй переключиться на innodb, только нужно иметь ввиду все отличия движков.
 

Trike

Новичок
К сожалению на текущем хостинге доступен только myisam
 

Gas

может по одной?
Trike
если пальцем в небо - когда нет unique индексов (кроме auto_increment), можешь перед массовым добавлением отключить индексы alter table `tbl` disable keys; потом увеличить myisam_sort_buffer_size и включить - alter ... enable keys.

repair тоже не дал результата.
вот это странно, а myisamchk пробовал ?
 

Trike

Новичок
Не пробовал.
Сегодня уже успел дампнуть и загрузить таблицу заново.
Как очередной раз загрузят данные проверю.
Пока есть идея LOCK TABLES делать перед загрузкой.
myisam_buffer_size я думаю изменить не получится - хостинг все таки ограниченный, хотя попробую.
 

Aleks_P

Новичок
При одновременном добавлении большого кол-ва строк нужно отключать реиндексацию. И только после добавления всех строк делать перестройку индексов. И это не lock table.
 
Сверху