Я ежедневно получаю CSV-файл в качестве обновления для одной из моих таблиц доступа (в дальнейшем: targetTable) с ок.От 20 до 30 000 строк.Для этого я создал tempTable, где загружаю CSV-файл в ADODB.Stream и выполняю некоторые проверки, и после успешных проверок я загружаю все записи в tempTable.
Я могу полностью удалить целевой объект и вставить всезаписи из tempTable, но проверит, является ли какая-либо запись новой или нет (что означает, что она уже была доставлена в прошлом).Для этой цели у меня есть столбец «обнаружен», где я храню дату, когда эта конкретная запись впервые появляется.Я проверю все столбцы из tempTable со всеми столбцами из targetTable.
В таблице почти 15 столбцов, и мое первое решение было таким:
DELETE * FROM targetTable WHERE (SELECT COUNT(*) FROM tempTable WHERE (targetTable.Id = tempTable.Id) AND (targetTable.Start = tempTable.Start) AND (targetTable.End = tempTable.End) ...
INSERT INTO targetTable SELECT tempTable.* FROM tempTable LEFT JOIN targetTable ON (targetTable.Id = tempTable.Id) AND (targetTable.Start = tempTable.Start) AND (targetTable.End = tempTable.End)
Производительность DELETEоператор был действительно плох, поэтому я попробовал это:
DELETE targetTable .* FROM targetTable LEFT JOIN tempTable ON ON (targetTable.Id = tempTable.Id) AND (targetTable.Start = tempTable.Start) AND (targetTable.End = tempTable.End) WHERE tempTable.Id Is Null;
Я получаю сообщение об ошибке «Удаление в этих таблицах невозможно».В представлении таблицы данных скорость кажется очень высокой, но в моем утверждении должно быть что-то не так.
У кого-нибудь есть идея или лучшее решение?