Массовое обновление MySQL слишком медленное

Здесь я только описываю необходимые поля для каждой таблицы

Таблица 1: системный импорт

(Эта основная таблица используется для хранения списка импорта)

  1. InternalImportID (bigINT [20], PK)
  2. ClientID (bigINT [20], fk для таблицы клиентов, которая здесь не актуальна)

Таблица 2: sysImportDonationCS

(Это временная таблица, используемая для хранения данных перед обработкой. После обработки строки перемещаются в таблицу tblDonation. Некоторые строки останутся в этой таблице со статусом = «Discarded» и Notes = «Причина отклонения». На начальном этапе состояния устанавливается как «NEW»)

  1. InternaltempID (bigINT [20], PK)
  2. InternalImportID (bigINT [20], FK для системного импорта)
  3. Статус (varchar (12))
  4. Примечания (средний текст)
  5. GiftID (varchar (30))

Таблица 3: tblDonation

[Эта таблица используется для хранения данных после обработки]
  1. InternalDonationID (bigINT [20], PK)
  2. GiftNumber (VARCHAR (255))
  3. InternalImportID (bigINT [20], FK для системного импорта)

Мне нужен запрос

Чтобы обновить строки в таблице sysImportDonationCS с помощью status = «Discarded» и Notes = «Reason», которые соответствуют sysImportDonationCS.GiftID и tblDonation.GiftNumber для одного и того же клиента (один и тот же клиент является важной точкой и подключен через sysimport). Я разобрался с запросом, который работает, но сейчас он слишком трудоемкий.

запрос

    UPDATE `sysimportdonationcs` as d INNER JOIN
(SELECT donation.internalTempID as tID from sysimportdonationcs as donation
INNER JOIN sysimport as s1 ON donation.`internalImportID` = s1.internalImportID INNER JOIN tbldonation ON donation.Gift_ID = tbldonation.giftNumber
INNER JOIN sysimport as s2 ON  tbldonation.internalImportID = s2.internalImportID
where s1.clientID = S2.clientID AND donation.status = 'NEW'  AND donation.internalImportID = $import_id order by tID limit 10) temp on temp.tID = d.internalTempID
SET d.status = 'Discarded', d.notes = 'The job type was incremental and a matching record found in the tblDonation table.' ;

Некоторый статус

  • Таблица tblDonation содержит 1,08,87,275 строк и будет расти
  • Таблица sysImportDonationCS содержит 1,8 М строк
  • Я использовал лимит в приведенном выше запросе, чтобы работать как пакет

Мне нужно оптимизировать вышеуказанный запрос, чтобы он работал быстрее.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]