将行反规范化为列可以增强SQL Server的性能吗?

前端之家收集整理的这篇文章主要介绍了将行反规范化为列可以增强SQL Server的性能吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个数据,它是一个整数值矩阵,表示带状分布曲线.
我正在针对INSERT性能优化SELECT性能.最多有100个乐队.
我主要是通过在一段时间内对频段求和或求平均来查询这些数据.

我的问题是,通过在每个频段有1列的表格中展平这些数据,或者使用表示频段值的单个列,我可以获得更好的性能吗?

扁平化数据

UserId ActivityId DateValue Band1 Band2 Band3....Band100
10001  10002      1/1/2013  1     5     100      200

或标准化

UserId ActivityId DateValue Band BandValue
10001  10002      1/1/2013  1    1
10001  10002      1/1/2013  2    5
10001  10002      1/1/2013  3    100

示例查询

SELECT AVG(Band1),AVG(Band2),AVG(Band3)...AVG(Band100)
FROM ActivityBands
GROUP BY UserId
WHERE DateValue > '1/1/2012' AND DateValue < '1/1/2013'

解决方法

以标准化格式存储数据.

如果您没有从此方案获得可接受的性能,而不是非规范化,请首先考虑您在表上的索引.您可能缺少一个索引,使其执行类似于非规范化表.接下来,尝试编写查询以从规范化表中检索数据,以便结果集看起来像非规范化表,并使用该查询创建indexed view.这将为您提供与非规范化表相同的性能,但保留好数据组织正常化的好处.

猜你在找的MsSQL相关文章