2011-12-14 5 views
0

私はデータベース全体を処理し、テーブル全体を反復処理しています。ある時点で、VARCHARが列の任意の値と一致するかどうかを確認する必要があります。VARCHARと他のものを速く比較する方法

私はこれを行うための速い方法が何であるか知りたいと思います。 SQLを毎回比較しますか?テーブル値をVARCHAR arrayに取得しますか?もう一つの解決策?

テーブルの反復回数は数百万を超えているため、比較は何百万回も行われます。マッチテーブルには、数百の値があります。

これにはどのような方法が最適ですか?

+1

これは標準的な参加と思いますか?パフォーマンスを向上させるためにインデックスを追加するオプションがあります。 –

+0

VARCHARがテーブル内の任意の値または*列*内の任意の値と一致するかどうかをチェックする必要がありますか? –

+0

@Catcall列にあります。 –

答えて

2

小さなテーブルのvarchar列にインデックスがあります。ルックアップはできるだけ速くなります。平等btreeインデックス(デフォルト)は等価演算子に適しています。インデックス検索で結果の

EXISTS (SELECT * FROM smalltbl WHERE lookup = bigtbl.lookup) 

:あなたが唯一のいくつかの値を検索した場合

CREATE INDEX smalltbl_lookup ON smalltbl(lookup); 

することは、これは最速の方法となります。あなたが見上げると、すべての値(あなたが行うような音はありません)、LEFT JOINが高速です:

SELECT * 
FROM bigtbl b 
LEFT JOIN smalltbl s USING (lookup) 

アレイに小さなテーブルから値を変換し、そこにチェックするには、インデックス検索と競合することはできません。

関連する問題