我有一个方案来执行一些通配名称的获取操作。通配名称可以超过75k。
案例1: 我尝试过IN子句和LIKE,但是在使用spring jdbc的IN子句中它不允许超过2500个参数化名称。所以,我使用并行异步请求,每个请求包含2500个通配名称
SELECT NAME FROM DB.TABLE_A
WHERE NAME LIKE ANY (:wildcarded_names)
Map<String, Object> paramMap = new HashMap<String, Object>();
paramMap.put("wildcarded_names", wildcarded_names);
SqlRowSet rowSet = getNamedParameterJdbcTemplate().queryForRowSet(query, paramMap);
Set<String> names = new HashSet<String>();
while (rowSet.next()) {
names.add(rowSet.getString("NAME"));
}
案例2: 在teradata中创建易失性表,插入所有通配名称并使用带有LIKE子句的innerjoin
SELECT NAME
FROM DB.TABLE tbl
INNER JOIN volatile_table vtbl ON vtbl.NAME LIKE tbl.NAME
哪一个效率更高,性能更好?
答案 0 :(得分:0)
如果您可以拥有高达75K的值,那么易失性表可能是您更好的选择。优化器包括TD 13.10附近的增强功能,以提高IN列表性能,但仍有限制。对于易失性表,如果它与PI不同,则应包括PI和连接列的统计信息。