sql-server - SQL Server:按所有列分组
问题描述
我有一个包含 16 列和超过一百万条记录的表(每月将一次性添加大约 20 万条)。
像这样的东西:
+----+------+------+-----+--------+----------------+
| Id | Col2 | Col3 | ... | Col 15 | Numeric Column |
+----+------+------+-----+--------+----------------+
| 1 | xxx | xxx | ... | xxx | 10 |
| 2 | yyy | yyy | ... | yyy | 20 |
| 3 | zzz | zzz | ... | zzz | 30 |
| 4 | xxx | xxx | ... | xxx | 40 |
+----+------+------+-----+--------+----------------+
大多数记录都是唯一的,但也有重复。考虑到每一列,我需要在此表上创建一个聚合这些重复行的视图。汇总记录时,我需要显示最后一个数字列的 SUM。例如,我的视图需要聚合记录 1 和 4。预期结果是(注意 SUM 为 50 (10+40)):
+------+------+-----+--------+-----------------------+------------------------------+
| Col2 | Col3 | ... | Col 15 | Sum Of Numeric Column | Amount Of Aggregated Records |
+------+------+-----+--------+-----------------------+------------------------------+
| xxx | xxx | ... | xxx | 50 | 2 |
| yyy | yyy | ... | yyy | 20 | 1 |
| zzz | zzz | ... | zzz | 30 | 1 |
+------+------+-----+--------+-----------------------+------------------------------+
我通过以下查询完成了此操作:
SELECT
[Column 2],
[Column 3],
...,
[Column 15],
SUM([Numeric Column]) AS [Sum Of Numeric Column],
COUNT(*) AS [Amount Of Aggregated Records]
FROM dbo.MyLargeTable WITH (NOLOCK)
GROUP BY [Column 2],
[Column 3],
...,
[Column 15]
此视图将作为其他视图的基础视图,这些视图需要聚合数据。这意味着它需要非常快。我的问题很简单:知道这个视图需要为其他视图提供数据,这是要走的路吗?有没有办法优化这个查询?我可以用索引来安排一些事情吗?
谢谢你。
解决方案
据我说,您的查询已经优化,不需要任何进一步的优化。在您的情况下,使用 CTE 只会降低性能。
推荐阅读
- xamarin - 上传文件到rest wep api c#
- scala - 如何从scala中的PDF文件中提取其他符号
- html - CSS 如何删除通过使用 CSS 减小图像大小而产生的额外空间
- python - 为什么 bash 脚本不能引用 python 模块?
- javascript - 没有调整视口大小的动画后画布不渲染
- javascript - Chrome 扩展上的 OAuth 2.0 不使用隐式流
- python - 有条件地向 SQLAlchemy 查询添加多个过滤器,而无需重复代码
- wordpress - 你可以在 WordPress 循环中有 2 个相邻的“if”语句吗?什么是最佳实践?
- python - 将十六进制值存储为整数
- azure - 对多租户应用程序使用授权码流不起作用