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 を使用しています。
皆さん、ありがとうございました!