【发布时间】:2015-07-10 10:23:46
【问题描述】:
我的查询需要帮助。该表有 1.44 亿行,这是一个阶段表(我们从另一个表插入数据)。我之前没有索引,而且这项工作已经运行了 9 个多小时。我用多列(AdvertiserName、MediaPlanName、MediaPlanNumber、CreativeDescription)向该表添加了非聚集索引,因为这种组合使其独一无二。但是即使现在执行计划显示的是表扫描,而不是非聚集索引扫描,性能也没有提高。
这是下面的查询,使用 SSIS 将数据汇总到 csv 文件需要很长时间。如何提高此查询的性能?请帮忙!! 运行需要很长时间。 :(
SELECT
AdvertiserName,
AdvertiserID,
MediaPlanNumber,
MediaPlanName,
PublishingSiteName,
SiteName,
Week_Begin_Monday,
CreativeDescription,
SUM(CAST(ViewCount AS BIGINT)) ViewCount,
SUM(CAST(ClickCount AS BIGINT)) ClickCount,
Media,
Segment_Name,
Segment_CD,
Group_Name,
Group_CD,
Channel,
LOB,
Creative_Message,
Creative_Category,
Creative_Type,
SUM(GRP) GRP,
Intended_Delivery_Screen
FROM Stage_MM240(NOLOCK)
GROUP BY AdvertiserName,
AdvertiserID,
MediaPlanNumber,
MediaPlanName,
PublishingSiteName,
SiteName,
Week_Begin_Monday,
CreativeDescription,
Media,
Segment_Name,
Segment_CD,
Group_Name,
Group_CD,
Channel,
LOB,
Creative_Message,
Creative_Category,
Creative_Type,
Intended_Delivery_Screen
【问题讨论】:
-
如果
( AdvertiserName,MediaPlanName,MediaPlanNumber, CreativeDescription)使一行唯一并且您将这些列包含在您的分组依据中,那么每个组不会只包含 1 行吗? -
您好 FuzzyTree,感谢您回答我的问题。是的,对于所有其他列,它不再是唯一的。那么我应该在所有列上创建索引吗?我迷路了,不知道该怎么办?
-
您在寻找特定范围的行吗?或来自这些行的数据?您能否通过其中的 WHERE 或 LIMIT 最小化查询选择和读取的数据量?
-
您的表中似乎有很多信息(除了行数)。也许你应该考虑normalization。
标签: sql sql-server performance large-data