如何改进涉及计数不同的慢TSQL查询?

时间:2014-10-28 18:11:03

标签: database tsql sql-server-2008-r2

如果有人能解释我在TSQL中遇到count distinct时遇到的巨大性能差异,我会很感激。我有一个包含以下列的表:

  • country_code(varchar(100),null)
  • item_code(varcher(50),null)
  • item_price(int,null)
  • item_quantity(tinyint,null)
  • user_no(int,null)

我想要的是item_price,item_quantity,item_code级别的用户数量,按国家/地区的总和。因此,以下查询:

SELECT country_code
      ,item_code
      ,TotalSales = SUM (item_price)
      ,TotalPurchase = SUM (item_quantity)
      ,UniqueBuyer = COUNT (DISTINCT user_no)
FROM TABLE_SALES WITH (NOLOCK)
GROUP BY item_code, country_code
ORDER BY country_code, item_code

查询极其缓慢,并且在1.5小时内没有完成。但是,当我分解查询并分别运行sumcount distinct部分时,每个部分都花了不到一分钟。

所以我想知道为什么count distinct在组合中增加了如此巨大的负担,而它本身并不是什么大不了的事情?鉴于这种情况,有没有更好的方法来完全处理查询?

提前感谢您的帮助!

0 个答案:

没有答案