0
와일드 카드로 작성된 일부 이름을 가져 오기 작업을 수행하는 시나리오가 있습니다. 와일드 카드 이름은 75k 이상일 수 있습니다.Teradata를 사용하는 휘발성 테이블의 IN 절 또는 내부 조인의 성능
사례 1 : 나는 IN 절을 시도하고 좋아하지만, 이상 2500 스프링 JDBC를 사용하여 절에 이름을 parametered 허용하지 않습니다. 그래서, 나는 모든 요청과 병행하여 비동기 요청이 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가 포함되어 사용 : 테라 데이타의 휘발성 테이블을 생성하고, 모든 와일드 카드 이름을 삽입하고 LIKE 절을 innerjoin 사용을
SELECT NAME
FROM DB.TABLE tbl
INNER JOIN volatile_table vtbl ON vtbl.NAME LIKE tbl.NAME
어느 것이 더 효율적이며 더 나은 성능을 제공합니까?
측정 ... 데이터 양에 따라 다를 수도 있습니다. 또한'in' 절이 개별 값에 포함 할 수있는 정도는 사용중인 데이터베이스에 따라 다를 수도 있습니다. –
또한 단 하나의 컬럼을 가지고 있다면'queryForList' 메소드를 사용하는 것이 좋습니다. 그것은'SqlRowSet'의 오버 헤드를 줄여줍니다. –
NAME 열만 선택 하시겠습니까? ~ 75k wildcarded_names를 전달하면 db에 몇 개의 레코드가 있습니까? – sura2k