我有带有 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。
谢谢你们!