標準EAVスキーマ:エンティティID用に1列、属性ID用に1列、値ID用に1列。
履歴EAVスキーマ:時間/日付範囲の列を追加します
実行時に、特定の行が除外されます。属性ごとに、エンティティごとに0、1、または多数の行が返される場合があります。残りの各属性の最新の値のみが必要です。
現在のソリューションでは、SQL ServerのRank()関数を使用して各行にランクを付け、where句に「andrank=1」を付けています。
ただし、パフォーマンスは十分ではありません。分析中に、ランクの割り当ては非常に高速であることがわかりましたが、ランクに対してwhere句を実行するには、データの2回目のスキャンが必要であり、データセット全体がRAMに保持されます。
残りの属性行をランク付けし、最新のものだけを返す最も速い方法は何ですか?