0

我有带有 10 个 VARCHAR(37) 列和一个 ID 的 Table1。它有250 行。我想为一特定的4 个字符字符串获取 TABLE1 中的行数,其中至少有一个包含这个 4 个字符字符串的 10 列。

结果将如下所示

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