我在foreach
循环中查询每个item
但它太慢了。
foreach (string item in X)
{
//This is the prototype
querystring = "select distinct g.N,g.NH + ' - ' + g.NV + ' - ' + g.S + ' - ' + g.VS ID
from Table1 as g inner join Table2 as d on d.V=g.V
where d.MD= '1234' and g.AC= 'item' and
g.N <> '' and g.NV <> '' and g.S <> '' and g.VS <> '' ORDER BY g.N";
}
我运行Estimated Execution Plan
,我无法在此处附加结果,但对于表1,index seek(nonClustered)
费用为40%
,其余parallelism (repartion streams) is 24%
均为低。
答案 0 :(得分:0)
您现在向数据库发出最多20个相同的查询(除了where
条件之外相同)。所以我要做的就是点击一个查询:
SELECT DISTINCT g.N
, g.NH + ' - ' + g.NV + ' - ' + g.S + ' - ' + g.VS ID
from Table1 as g
INNER JOIN Table2 as d
ON d.V=g.V
WHERE d.MD= '1234'
AND g.N <> ''
AND g.NV <> ''
AND g.S <> ''
AND g.VS <> ''
ORDER BY g.N
并将结果加载到某种变量中,Dictionary
或Datatable
似乎是您最好的选择。
如果您拥有变量中的所有数据,则可以查询X中各个项目的结果。例如,您可以使用Linq
。
另外,我刚刚复制了你的查询,但我也会在C#中进行所有字符串连接。因此,只需分别选择g.NH
和g.NV
等,然后将它们连接到您需要的地方。
最后,您确定需要DISTINCT
吗?通常,当您必须使用它时,这意味着JOIN
条件错误/不完整。这可能是正确的,只要确定它是。