6

帯状の分布曲線を示す整数値の行列であるデータがあります。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'
4

4 に答える 4

4

非正規化は、(ほぼすべての) 他の手段を犠牲にして、データにアクセスする手段を 1 つだけ最適化します。

パフォーマンスが重要なアクセス方法が 1 つしかない場合は、非正規化が役立つ可能性があります。ただし、適切なインデックスを選択すると、より大きなメリットがあります。ただし、パフォーマンスが重要なデータへのアクセス パスが複数ある場合は、他の最適化を検討することをお勧めします。

適切なクラスター化インデックスの作成。非クラスター化インデックスを SSD に配置します。サーバーのメモリを増やします。* さまざまなアクセス間でトレードオフするのではなく、すべてのアクセスのパフォーマンスを向上させるすべての手法です。

于 2013-05-14T02:49:01.483 に答える