2016-06-02 10 views
0

いくつかのワイルドカード名のフェッチ操作を行うシナリオがあります。ワイルドカード名は75kを超えることができます。Teradataで揮発性テーブルを使用したIN節または内部結合のパフォーマンス

ケース1: 私は句で試みなどが、それは春のJDBCを使用してIN句で2500人の以上の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を含む使用: Teradataの中の揮発性の表を作成し、すべてのワイルドカードを使った名前を挿入し、LIKE句でinnerjoin使用を

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

どちらが効率的で、パフォーマンスが向上しますか?

+0

対策...データの量によっても異なる場合があります。また、 'in'節が別々の値にどれくらい入れることができるかは、使用中のデータベースに依存することさえあります。 –

+0

カラムが1つしかない場合は、 'queryForList'メソッドを使いたいかもしれません。それは 'SqlRowSet'のオーバーヘッドを節約します。 –

+0

NAME列のみを選択したいですか? 〜75k wildcarded_namesを渡すと、あなたのデータベースにはいくつのレコードがありますか? – sura2k

答えて

0

最大75Kの値を持つことができる場合は、揮発性テーブルが適しています。オプティマイザには、INリストのパフォーマンスを向上させるためにTD 13.10の強化が含まれていましたが、まだ限界があります。揮発性テーブルでは、PIと統計情報が異なる場合は、PIと結合カラムに関する統計情報を含める必要があります。

関連する問題