Мы используем весеннюю загрузку, SQL-сервер и облако Azure.
Цель состоит в том, чтобы обновлять 2000 записей по партиям в таблице, содержащей 52 миллиона строк, без использования собственного запроса.
В таблице есть один внешний ключ, для каждого из которых имеется значительное количество строк, и он разбит по значению внешнего ключа.
Пример таблицы,
seq | id | value
-------------------
1 | A1 | v1
2 | A1 | v2
3 | B1 | v3
4 | B1 | v4
... Фактический запросесть,
select * from sample where id=? and value in (?)
2 parameter will have 2000 strings.
using Spring data JPA repository methods.
A1 имеет 100K записей.B1 имеет 400K записей.
, когда я выполняю запрос со значениями A1 и 2000. Для извлечения потребовалось 17 секунд.с B1 и другими 2000 значениями (которых у A1 нет) для извлечения из приложения потребовалось 70 секунд.
Но когда я выполняю тот же запрос в SSM, это занимает всего 3 секунды.
Это из-за фильтрации B1 из 400K / 52M и A1 из 100K / 52M?
строка подключения имеет, sendStringParametersAsUnicode=false;
, и оба столбца также имеют индекс.
Tried CriteriaUpdate для каждой строки, ноте же результаты - 35 с для 2K / 100K / 52M и 2 минуты для 2K / 400K / 52M.поэтому удалите его и теперь пытайтесь это сделать, извлекать все сразу и обновлять все сразу. Любое обновление происходит быстрее, только выборка занимает время.
Примечание. Мы не использовали Spring Batch для этого конкретного процесса из-зазаписи будут считаны из Flatfile, и каждая строка в файле должна быть обновлена в этой таблице.так что есть читатель, чтобы прочитать строку из файла, процессор массажирует DTO и в писателе, пытающемся сделать это update.chunk размера 2000.