У меня есть приложение django, у которого есть модель (Person
), и у меня также есть DB (в таблице есть Appointment
), у которых нет определенных моделей (не предназначенных для подключения к приложению django).Как улучшить производительность копирования django mysql?
Мне нужно переместить некоторые данные из таблицы Appointment
на номер Person
, чтобы вся информация, которую столбец «Люди» должна была отражать в таблице «Назначение». Именно так, потому что существует несколько независимых DB, таких как Appointment, которые нужно скопировать в таблицу Person (поэтому я не хочу делать какие-либо архитектурные изменения в том, как это настраивается).
Вот что я делаю сейчас:
res = sourcedb.fetchall() # from Appointment Table
for myrecord in res:
try:
existingrecord = Person.objects.filter(vendorid = myrecord[12], office = myoffice)[0]
except:
existingrecord = Person(vendorid = myrecord[12], office = myoffice)
existingrecord.firstname = myrecord[0]
existingrecord.midname = myrecord[1]
existingrecord.lastname = myrecord[2]
existingrecord.address1 = myrecord[3]
existingrecord.address2 = myrecord[4]
existingrecord.save()
Проблема заключается в том, что это слишком медленно (занимает около 8 минут для 20K записей). Что я могу сделать, чтобы ускорить это?
Я рассмотрел следующий подход:
1. bulk_create: не может использовать это, потому что я должен обновить иногда.
2. удалить все, а затем bulk_create Существует зависимость от модели Person от других вещей, поэтому я не могу удалить записи в модели Person.
3. INSERT ... ON DUPLICATE KEY UPDATE: не может этого сделать, поскольку PK таблицы Person отличается от таблицы назначения PK (первичный ключ). Назначение PK копируется в таблицу Person. Если бы был способ проверить два дублирующих ключа, этот подход будет работать, я думаю.
Проблема была в том, что мне нужно было создать индекс - я смог запустить запрос за 76 секунд, и когда я использовал атом(), я смог получить это за 56 секунд. – Trewq
Ну, иногда это проще, чем кто-то думает ... –