IN子句或带有Teradata的volatile表的内部联接的性能



我有一个场景来对一些通配符名称执行提取操作。通配符可以超过75000。

案例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中创建Volatile表,并插入所有通配符名称,并使用带有LIKE子句的innerjoin

SELECT NAME
FROM DB.TABLE tbl
INNER JOIN volatile_table vtbl ON vtbl.NAME LIKE tbl.NAME

哪一个效率更高,性能更好?

如果您可以拥有多达75K的值,那么volatile表可能是您更好的选择。优化器在TD 13.10前后进行了增强,以提高IN列表的性能,但仍有局限性。对于volatile表,如果PI和join列与PI不同,则应包含该列的统计信息。

最新更新