使用Teradata的易失性表的IN子句或内连接的性能

时间:2016-06-02 06:29:51

标签: spring teradata spring-jdbc sqlperformance

我有一个方案来执行一些通配名称的获取操作。通配名称可以超过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

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

1 个答案:

答案 0 :(得分:0)

如果您可以拥有高达75K的值,那么易失性表可能是您更好的选择。优化器包括TD 13.10附近的增强功能,以提高IN列表性能,但仍有限制。对于易失性表,如果它与PI不同,则应包括PI和连接列的统计信息。