我在Postgres中有以下表格
Employee:
EmployeeId,
EmployeeName,
EmployeeSal,
PrimaryKey(EmployeeId)
EmployeeBonus:
BonusCode,
BonusAmount,
EmployeeId,
PrimaryKey(BonusCode, EmployeeId)
我们有大约50个BonusCodes,而EmployeeBonus表有1500万行
我在java程序中有以下数据。
以上数据位于如下地图中。我可以获得每个员工的BonusCode列表清单 (EmployeeId,List(BonusCodes))
现在我在Java程序中的要求是从EmployeeBonus表中找到具有BonusCode和EmployeeId的唯一组合的记录 使用提供的2个列表。
任何人都可以帮我找到最佳的方法来找到性能良好的结果。
查询1:
SELECT DISTINCT BonusCode, EmployeeId
FROM EmployeeBonus;
获取现有结果(大约1500万),并在java程序中处理它们 但是这个查询在java程序中抛出OutOfMemoryError,因为数据的大小很大。
QUERY2:
SELECT DISTINCT BonusCode, EmployeeId
FROM EmployeeBonus
WHERE EmployeeId = :EmployeeId
AND BonusCode IN (:BonusCodeList);
循环使用EmployeeId列表并使用BonusCode列表多次执行上述查询 工作正常,但需要花费大量时间来执行多个查询并收集结果
QUERY3:
SELECT DISTINCT BonusCode, EmployeeId
FROM EmployeeBonus
WHERE BonusCode = :BonusCode
AND EmployeeId IN (:EmployeeIdList);
循环使用BonusCode列表并使用EmployeeId列表多次执行上述查询 工作正常,但需要花费大量时间来执行多个查询并收集结果
Query4:
SELECT DISTINCT BonusCode, EmployeeId
FROM EmployeeBonus
WHERE EmployeeId IN (:EmployeeIdList)
AND BonusCode IN (:BonusCodeList);
然而,这不是我想要的数据列表