Мы получаем базу данных доступа (.accdb) из внешнего источника и не имеем контроля над структурой или данными. Нам нужно глотать данные в нашу БД с помощью кода. Это означает, что у меня есть контроль над SQL.Предельные записи с SQL в Access
Наша проблема заключается в том, что одна таблица содержит почти 13 тыс. Записей (в настоящее время 12,997) и занимает много времени для обработки. Я хотел бы запросить данные из исходной БД, но только предопределенное количество записей за один раз - скажем, 1000 за раз.
Я пробовал генерировать свой запрос внутри цикла, где я обновляю число записей, возвращаемых с каждым циклом. До сих пор, единственное, что я обнаружил, что приближается к обработке что-то вроде этого:
SELECT *
FROM (
SELECT Top + pageSize + sub.*
FROM (
SELECT TOP + startPos + [Product Description Codes].*
FROM [Product Description Codes]
ORDER BY [Product Description Codes].PRODDESCRIPCODE
) sub
ORDER BY sub.PRODDESCRIPCODE DESC
) subOrdered
ORDER BY subOrdered.PRODDESCRIPCODE
Где увеличиваем PAGESIZE и StartPos с каждой петлей. Проблема в том, что он всегда возвращает 1000 строк, даже на том, что, как я думаю, должен быть последним циклом, когда он должен возвращать только 997, а затем возвращать ноль после этого.
Может ли кто-нибудь помочь мне с этим? У меня нет другой колонки для фильтрации. Есть ли способ выбрать определенное количество записей в цикле, а затем увеличивать это число до тех пор, пока я не получу все записи, а затем остановитесь?
Можете ли вы уточнить, что вы имеете в виду, берет время для обработки? 13k записей ничего и не должно быть медленным –
Прямо сейчас я получаю все 13k записей. Для каждого из них мой код проверяет существующую запись в нашей БД. Если есть существующая запись, она обновляется; если нет существующей записи, вставляется текущая. Я позволил этому запустить вчера, и потребовалось 3,437,640 миллисекунды, что составляет около 57 минут. Это вне наших показателей производительности. – Steve
Я видел ваш комментарий сейчас. Вау, это медленно. Возможно, вы делаете весь процесс неправильным. Похоже, вы делаете операцию один за другим, где только два будут делать? (один для обновления, один для вставки) –