Mysql Bulk query и insert_id..

beba

Новичок
Здравствуйте..

Стоит задача импорта данных из xls в MySQL.
Данные нужно заносить в три таблицы. Первая справочник, остальные две связь один ко многим.

Беру файл в 1000 строк. Загружаю его, предварительно провожу небольшие манипуляции регуляркой с данными файла, вношу данные в объект класса и вызываю метод добавить.

В методе происходит добавление в одну основную таблицу, получаю ид через tep_db_insert_id() и дальше добавляю информацию в две другие таблицы, в зависимости от условий.

Вроде все хорошо, за исключением того, что 1000 строчек добавляются примерно 120 секунд.
Оставляю один только первый запрос и только добавления одного поля, проверить. 1000 строк - 50-55 секунд.
Убираю только само выполнение запросов на добавление в БД и действия выполняются 1 секунду..

Север свой, 2 процессора Xeon E5310, 6Гб памяти. Таблицы в БД MYISAM. На сервере стояла настройка в mysql/my.cnf - "low-priority-updates", убрав ее ничего особенно не помогло (выиграл может пару секунд). На сервере два наших больших проекта, в среднем по 100-120 постоянных подключений к БД. Но сам север нельзя сказать, что нагружен.. htop выдает - Load average: 0.75 0.85 0.84.

Попробовал сделать bulk в первом запросе, файл импортировался за 1-2 секунды.
Так вот вопрос, а как мне insert_id выцепить для других таблиц..?..
mysql_insert_id - выдает первый ид. т.е. в принципе если блокировать таблицу, добавлять порциями, то я всегда могу к первому ид добавить количество добавленных строк и получу для всех идшки..

Не кривовато ли?
может кто нибудь с подобным сталкивался?.. может есть совет?..
И вообще, скорость выполнения insert запроса не слишком медленная?

Спасибо..
p.s. спасибо и за то, что дочитали до конца этот пост :)
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Предпологаю — много индексов на таблице?
 

beba

Новичок
в таблице куда добавляю есть только первичный ключ и один индекс по полю user_id int(11)...

а вообще на этом сервере в БД да, индексов много...
две основные БД примерно по 200 таблиц, а сами базы в бэкапе в gzip занимают примерно 200Мб.. (без архива почти 4Гб)
 

chira

Новичок
нельзя ли ID проставить заранее и сгенерить инсерты вида:
Код:
insert into mytable (id, field1, ....) values (1,'blabla',...),(2,'tratata',...),...,(1000,'bubu',...),
 

WMix

герр M:)ller
Партнер клуба
конечно можно, можно и AUTO_INCREMENT сдвинуть, на крайний случай, тыж знаешь откуда начинается, можно и в экселе сразу проставить ключики... но стоит ли заморачиваться?
так между делом, а триггер на инзерт не подвешан? это тоже может быть тормозом...
или табличка постоянно используется (или всеже разговор про localhost) и находится в постоянном блоке?

хотя сдается мне что индекса как раз и не хватает, покажи структуры таблиц, со всеми INDEX и CONSTRAINT
и проверь на триггер show-triggers
 
Сверху