Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何优化此查询?_Sql_Sql Server 2008 - Fatal编程技术网

Sql 如何优化此查询?

Sql 如何优化此查询?,sql,sql-server-2008,Sql,Sql Server 2008,所提供的内容有些抽象,因此很难提供反馈 UPDATE a SET CountOfAA=dt.CountOf, CountOfBB=dt.CountOf FROM @MediaResurce a INNER JOIN (SELECT aa.Sku,ISNULL(COUNT(bb.sku),0) AS CountOf FROM @MediaResurce aa

所提供的内容有些抽象,因此很难提供反馈

UPDATE a
SET CountOfAA=dt.CountOf,
CountOfBB=dt.CountOf
FROM @MediaResurce  a
INNER JOIN (SELECT 
                aa.Sku,ISNULL(COUNT(bb.sku),0) AS CountOf
                FROM @MediaResurce                      aa
                    LEFT OUTER JOIN @MediaResurce_Pics  bb 
                    ON aa.sku=bb.sku
                WHERE somecol = 0
                GROUP BY aa.Sku
           ) dt ON a.sku=dt.sku
INNER JOIN (SELECT 
                aa.Sku,ISNULL(COUNT(bb.sku),0) AS CountOf
                FROM @MediaResurce                      aa
                    LEFT OUTER JOIN @MediaResurce_Pics  bb 
                    ON aa.sku=bb.sku
                 WHERE somecol = 1
                GROUP BY aa.Sku
           ) dt2 ON a.sku=dt2.sku

刚开始白手起家,结果与OMG的答案相似:

UPDATE a
   SET CountOfAA = CASE WHEN b.somecol = 0 THEN b.CountOf END,
       CountOfBB = CASE WHEN b.somecol = 1 THEN b.CountOf END
  FROM @MediaResurce a
  JOIN (SELECT aa.Sku,
               somecol,
               ISNULL(COUNT(bb.sku), 0) AS CountOf
          FROM @MediaResurce aa
     LEFT JOIN @MediaResurce_Pics bb ON aa.sku = bb.sku
         WHERE somecol IN (0, 1)
      GROUP BY aa.Sku, somecol) b ON b.sku = a.sku
注意事项:

我以为“somecol”在@MediaResurce中。如果它存在于@MediaResurce_Pics中,我看不出第二个内部连接的原因 对于较大的表,可以通过在源表上设置适当的索引(如“sku”和“somecol”)来显著提高此类查询的速度。但是表变量不支持索引。你能把它们换成临时的或固定的桌子吗?这张桌子有多大?
没有任何背景?如果你希望人们花时间回答你的问题,你应该花一些时间问这个问题。你的问题涉及面很广,没有告诉我们你所面临的具体问题。@Mitch Wheat,那真的伤害了我的感情。这不是针对个人的,也不应该如此。这是我的专家意见。您需要提供表scehma,包括定义的索引。告诉我们您目前有哪些问题。所以用户无法读懂大脑…好的,等一下,我会得到一个模式,我认为你的意思是CountOfBB=dt2.CountOf?这基本上是查询一次,然后根据somecol的值将结果放入两个桶中。我完全支持这种方法,它比使用联接进行两个子选择要快。
UPDATE a
SET CountOfAA=dt.CountOfAA,
    CountOfBB=dt.CountOfBB
FROM @MediaResurce a
INNER JOIN (
    SELECT
        aa.sku,
        SUM(CASE WHEN aa.somecol = 0 THEN 1 ELSE 0 END) AS CountOfAA,
        SUM(CASE WHEN aa.somecol = 1 THEN 1 ELSE 0 END) AS CountOfBB
    FROM @MediaResurce_Pics bb 
    INNER JOIN @MediaResurce aa ON aa.sku = bb.sku
    GROUP BY aa.sku
) dt ON dt.sku = a.sku