Таким образом, у меня есть база данных, где существует много данных, вставляемых из JAVA-приложения. Usualy, которые я ввожу в table1, получают последний идентификатор, с другой стороны вставляют в table2 и получают последний идентификатор оттуда и наконец вставляют в table3 и получают тот идентификатор также и работу с ним в рамках приложения. И я вставляю приблизительно 1000-2000 строк данных каждые 10-15 минут.
И использование большого количества маленьких вставок и выбирает на производственном веб-сервере, не действительно хорошо, потому что оно иногда срывает сервер.
Мой вопрос: существует ли путь, как вставить несколько данных в table1, table2, table3, не используя такую огромную сумму выборов и вставляет? Существует ли sql-fu техника, которую я пропускаю?
Поскольку вы, вероятно, полагаетесь на первичные ключи auto_increment, вам нужно выполнять вставки по одной, по крайней мере, для table1 и table2. Потому что MySQL не даст вам больше, чем самый последний сгенерированный ключ.
Вы никогда не должны выбирать. Вы можете получить последний вставленный идентификатор из оператора, используя метод getGeneratedKeys ()
. См. Пример, показывающий это, в руководстве MySQL для Connector / J:
Другие рекомендации:
INSERT
для table3. ALTER TABLE DISABLE KEYS
во время импорта и повторно включите их, когда закончите. К сожалению, вы не можете использовать самый быстрый метод для массовой загрузки данных, ЗАГРУЗИТЬ ИНФАЙЛ ДАННЫХ
, потому что он не позволяет вам получать сгенерированные значения идентификаторов для каждой строки.
Здесь есть о чем поговорить:
Вы можете изменить структуру своей базы данных так, чтобы первичный ключ не был автоматически увеличивающимся значением, генерируемым базой данных, а скорее был создан клиентом UUID. Затем вы можете заранее сгенерировать все ключи для каждой записи и группировать вставки, как вам нравится.