0
私は潜在的に数十万行までのテーブルを持っています。各行は、特定の申請者による国勢調査ブロック内の資金調達の申請書を表しています。私はほんの数百行を持っている場合は、私はこれを使用して、その国勢調査ブロック内の各アプリケーションにランクを割り当てることができます。これは、その年の国勢調査ブロック内単価によって、各アプリケーションをランク付けするために正常に動作しAccessでグループ内のレコードをランク付けする効率的な方法は何ですか?
SELECT art1.CFA_Plus, art1.Census_Block_ID,
(SELECT count(*) + 1
FROM AppReferenceTable art2
WHERE art2.State_Cost_Per_Unit < art1.State_Cost_Per_Unit AND
art2.Census_Block_ID = art1.Census_Block_ID) AS Rank_In_Block
FROM AppReferenceTable AS art1;
。しかし、それは私のテストテーブルで約60,000行を窒息する。より良い方法がありますか?または、私は何を間違っているのですか?
ありがとうございます!
ライブを計算するのが余りにも多くなると、結果を保存できます。 AppReferenceTableにフィールドを追加し、それをランクで塗りつぶすUPDATEクエリを作成します。毎晩実行するようにスケジュールします。すぐに最新のデータを持っていない限り、契約を破ることができます、それは仕事を行います。 – SunKnight0
サブクエリがMS ACCESSに対して最適化されていないため、各レコードを再計算する必要があり、これがパフォーマンスに影響します。このような大規模なデータセットを処理するには、専用のDBMSに移行する必要があります。 MySQLは無料で、引き続きMS Accessのフロントエンドを使用して、これらすべての優れたSQL操作を利用することができます。 –