一个内连接的慢查询

时间:2015-12-07 09:43:09

标签: sql sql-server sql-server-2008 optimization query-optimization

我在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%均为低。

1 个答案:

答案 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

并将结果加载到某种变量中,DictionaryDatatable似乎是您最好的选择。

如果您拥有变量中的所有数据,则可以查询X中各个项目的结果。例如,您可以使用Linq

另外,我刚刚复制了你的查询,但我也会在C#中进行所有字符串连接。因此,只需分别选择g.NHg.NV等,然后将它们连接到您需要的地方。

最后,您确定需要DISTINCT吗?通常,当您必须使用它时,这意味着JOIN条件错误/不完整。这可能是正确的,只要确定它是。