データベース: オラクル 11g
私はグリーンフィールド プロジェクトに取り組んでおり、データベース スキーマを設計しています。名前が示すように、最終的に膨大な数のレコードを保持するように成長する監査テーブルがあります。以下はテーブル定義です (不要な列を削除した後)。
create table ClientAudit (
id number(19,0) primary key,
clientId number(19,0) not null,
createdOn timestamp with time zone default systimestamp not null
);
id は、オラクル シーケンスによって入力される自然数です。
clientId は一意のクライアント識別子です。
レポートによるクエリを簡単にするために、次のビューも作成しています。これは、createdOn に基づいて、各クライアントの最新のレコードを提供します。
create or replace view ClientAuditView
as
select * from (
select ca.*,max(ca.createdOn) keep (dense_rank last order by ca.createdOn)
over (partition by ca.clientId) maxCreatedOn
from ClientAudit ca
)
where createdOn=maxCreatedOn;
/
ClientAudit テーブルを分割する場合、ここで分割キーを何にするべきかわかりません。
それは ClientId または CreatedOn である必要がありますか?
パーティショニング戦略はどうあるべきか?