0

10 個の VARCHAR(37) 列と ID を持つ Table1 があります。250 行あります。特定の 4 文字の文字列のセットについてこの4 文字の文字列を含む 10 列のうち少なくとも 1 つを含む TABLE1 の行数を取得したいと考えています。

結果は次のようになります

str    count
............
T100     4
T010    50
  .     .
  .     .
  .     .
............

私の質問はそれを行う方法ではなく、パフォーマンスについてです

私はこのようにそれをやった

>  DECLARE @Helper TABLE(Str Varchar(4), Count INT DEFAULT 0 )
>  --I will skip here insering those 150  4char strings into @Helper on Str column
>  
>  UPDATE @Helper SET [Count] = SELECT COUNT(ID) FROM Table1 T WHERE
>     CHARINDEX(Str,T.Col1) > 0 OR CHARINDEX(Str,T.Col2) > 0 ...... OR
>     CHARINDEX(Str,T.Col10) > 0
> 
> --where Col1...Col10 are the VARCHAR(37) columns

これには約 2 秒かかります。多すぎませんか?私の推測では、SQL Server は WHERE 句のすべての条件を評価します。たとえ 1 つだけで十分であっても (私は OR しかありません)。私は正しいですか?または、これを 2 秒以内に行うにはどうすればよいですか? SQL Server 2008 を使用しています。

皆さん、ありがとうございました!

4

0 に答える 0