1

データベース: オラクル 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 である必要がありますか?
パーティショニング戦略はどうあるべきか?

4

2 に答える 2