【发布时间】:2021-02-23 09:36:12
【问题描述】:
我有一个应用程序,用户将上传一个包含超过 10,000 行的 excel 文件(.xlsx 或 .csv),其中包含要在数据库中查找的值的单列“partId”
我将读取 excel 值并将其存储在列表对象中,并将列表作为参数传递给 Spring Boot JPA 存储库 find 方法,该方法在内部构建 IN 子句查询:
// Read excel file
stream = new ByteArrayInputStream(file.getBytes());
wb = WorkbookFactory.create(stream);
org.apache.poi.ss.usermodel.Sheet sheet = wb.getSheetAt(wb.getActiveSheetIndex());
Iterator<Row> rowIterator = sheet.rowIterator();
while(rowIterator.hasNext()) {
Row row = rowIterator.next();
Cell cell = row.getCell(0);
System.out.println(cell.getStringCellValue());
vinList.add(cell.getStringCellValue());
}
//JPA repository method that I used
findByPartIdInAndSecondaryId(List<String> partIds);
我阅读了很多文章并在上述情况下遇到了相同的情况,即使用 IN 查询对于庞大的数据列表是低效的。
如何优化上述场景或编写新的优化查询?
另外,请告诉我是否有比上述代码sn-p更优化的读取excel文件的方式
这会很有帮助!!提前致谢!
【问题讨论】:
-
在 Stackoverflow 上有一些使用
VALUES连接而不是in的示例。你试过这个吗? -
@madflow,我试过了。我想知道是否有任何其他优化的方式来处理大量的值
-
@LaurenzAlbe,由于我将通过 API 从用户界面接收列表,因此我必须在应用程序和数据库之间移动大型列表。我不知道如何有效地通过列表
-
@LaurenzAlbe,恐怕我不清楚你的陈述:(。你能分享任何示例查询吗?
标签: excel postgresql spring-boot spring-data-jpa