Labutin
Новичок
Как правильно обновлять прайсы в достаточно большой таблице?
Есть таблица sklad с полями:
Производитель: maker
Номенклатурный номер: number
Количество: quantity
Цена: price
ИдентификаторПоставщика: supplierID
Каждый поставщик имеет свой уникальный идентификатор (число от 0 и до бесконечности). Поставщики присылают прайс-листы с данными:
Производитель;Номенклатурный номер;Количество;Цена
Эти данные заносятся в указанную таблицу.
Чтобы обновить прайс поставщика происходит следующее:
DELETE FROM sklad WHERE supplierID='идентификатор обновляемого прайса';
и куча INSERT'ов в стиле:
INSERT INTO sklad (maker, number, quantity, price, supplierID) VALUES(........);
в одном INSERT указывается 100 VALUES, чтобы запрос был не вот уж безумно длинным.
Есть индексы по полям: maker, number, supplierID
Сейчас в таблице sklad 50 миллионов строк. Таблица InnoDB MySQL 5.0.77
При увеличении таблицы время обновления прайсов все расло и расло. Сейчас достигло уже неприемлемого времени.
1. Долго работает DELETE (при большом прайсе в районе 100 тыс позиций может удалять секунд 20-30)
2. INSERT'ы тоже работают не быстро - т.к. нужно индексы обновлять.
Сейчас все это закатал в одну транзакцию - стало раза в полтора - два быстрее. Остроту проблемы снял, но при увеличении базы снова все будет плохо.
Ну а теперь вопрос: может я в принципе что-то делаю не так? Если так, то как бы тут ускориться?
Есть таблица sklad с полями:
Производитель: maker
Номенклатурный номер: number
Количество: quantity
Цена: price
ИдентификаторПоставщика: supplierID
Каждый поставщик имеет свой уникальный идентификатор (число от 0 и до бесконечности). Поставщики присылают прайс-листы с данными:
Производитель;Номенклатурный номер;Количество;Цена
Эти данные заносятся в указанную таблицу.
Чтобы обновить прайс поставщика происходит следующее:
DELETE FROM sklad WHERE supplierID='идентификатор обновляемого прайса';
и куча INSERT'ов в стиле:
INSERT INTO sklad (maker, number, quantity, price, supplierID) VALUES(........);
в одном INSERT указывается 100 VALUES, чтобы запрос был не вот уж безумно длинным.
Есть индексы по полям: maker, number, supplierID
Сейчас в таблице sklad 50 миллионов строк. Таблица InnoDB MySQL 5.0.77
При увеличении таблицы время обновления прайсов все расло и расло. Сейчас достигло уже неприемлемого времени.
1. Долго работает DELETE (при большом прайсе в районе 100 тыс позиций может удалять секунд 20-30)
2. INSERT'ы тоже работают не быстро - т.к. нужно индексы обновлять.
Сейчас все это закатал в одну транзакцию - стало раза в полтора - два быстрее. Остроту проблемы снял, но при увеличении базы снова все будет плохо.
Ну а теперь вопрос: может я в принципе что-то делаю не так? Если так, то как бы тут ускориться?