2012-07-03 5 views
4

В моем приложении у меня много зависимостей внешнего ключа и часто вставляются большие числа строк. То, что я сделал до сих пор, запускает одну вставку за раз и записывает идентификатор вставки. Это занимает много времени при вставке большого количества строк, даже когда apache и mysql запускаются на одном сервере.MySQL параллельные многострочные вставки - Insert ID Предположение

Мой вопрос в том, должен ли я изменить свое приложение, чтобы добавить несколько строк с одним INSERT, мог ли я принимать идентификаторы каждой строки, основываясь строго на последнем идентификаторе вставки, возвращаемом соединением mysql? Проблема заключается в том, что существует случайная ситуация, когда более одного человека помещают большие объемы информации в базу данных одновременно.

Из того, что я смог определить, кажется безопасным предположить, что при вставке 500 строк ваши идентификаторы вставки будут варьироваться от (lastInsertID) до (lastInsertID + 499), независимо от того, имеет ли запрос из другого соединения началось или закончилось за время, необходимое для завершения, но я хочу быть уверенным, что это принято как безопасная практика.

Я в основном работаю с InnoDB, но там есть и MyISAM.

Спасибо всем!

-Jer

ответ

5

mysql_insert_id и теперь рекомендуется альтернативные mysqli_insert_id возвращает первый вход идентификатор из AUTO_INCREMENT колонки затрагиваемой таблицы последнего запроса вы бежали.

Mysql сгруппированные инструкции INSERT вставляются итеративно из первого индекса AUTO_INCREMENT. Поэтому да, можно с уверенностью предположить, что записи, вставленные из одного оператора INSERT, смежны.

Комментарий от Mysql reference «Идентификатор, который был сгенерирован, поддерживается на сервере для каждого соединения. Это означает, что значение, возвращаемое функцией для данного клиента, является первым значением AUTO_INCREMENT, сгенерированным для последнего заявления, влияющим на столбец AUTO_INCREMENT этого клиента. Это значение не может быть затронуто другими клиентами, даже если они генерируют собственные значения AUTO_INCREMENT. Такое поведение гарантирует, что каждый клиент может получить свой собственный идентификатор, не заботясь о деятельности других клиентов, и без необходимости для блокировок или транзакций.

+0

Фантастический. – SuperJer