列パーティション化は、データベース設計の物理的な選択肢の1つで、特定の種類のワークロードに対してパフォーマンスを改善できます。列パーティション化には、次のようなパフォーマンス上の影響が想定されます。
- 列パーティション テーブルの少数の列や行のサブセット(しかも対象となる列や行がさまざまに異なる)を述部の中で、または射影としてアクセスするクエリーについて、I/Oのパフォーマンスが大幅に改善されることを期待できます。
たとえば、クエリーに対して必要になるのが行内のデータの20%である場合、列パーティション テーブルのI/Oは、列パーティションなしのテーブルのおよそ20%になるはずです。
自動圧縮の効果が高いと、I/Oはさらに削減される可能性があります。多数の列を射影するか、述部の中で使用する場合は、行を再構成するために追加のI/Oが必要になる可能性があります。
- 列パーティション テーブルの列または行、あるいはその両方のうち相当数のサブセットをアクセスするリクエストに対しては、パフォーマンスにかなりの悪影響が出る可能性があります。
- 自動圧縮、圧縮解除、およびコンテナを処理するため、CPU使用率が増加する場合があります。I/Oが減り、CPU使用率が増加することにより、ワークロードがI/OバウンドからCPUバウンドに変化する可能性があります。
CPUバウンドのワークロードは、列パーティション化では改善されないことがあります。
- 列パーティション テーブルや結合インデックスへのINSERT操作にかなりの悪影響が出る可能性があります。特に、単一行INSERT操作で悪影響が大きくなりますが、配列INSERTリクエストやINSERT … SELECT文などのバルク挿入操作にはあまり影響しません。
- 比較的多くの行を選択して更新するUPDATE操作では、悪影響が大きくなる可能性があります(このトピックの最初の2項目で説明したとおり)。Teradata Databaseは、UPDATE操作を、DELETE操作とその後のINSERT操作の組合せとして実行します。そのため、UPDATE操作で選択されたすべての行と列にアクセスする必要があります。
列パーティション テーブルのアクセスおよび更新では、達成されるパフォーマンス向上が1桁以上の場合と、悪影響が1桁以上の場合があります。
最も効果が上がるのは、数百または数千の列を持つテーブルの単一列パーティション内の列を特別に選択的に操作して、ごく少数の列を射影する場合です。
最も悪影響が出るのは、テーブル内の大部分または全部の列を射影する操作など、選択性の非常に小さいクエリーの場合です。数千の列パーティションが存在し、使用可能な列パーティション コンテキストは8個だけなので、1つのパーティションにごく少数の行しか入らない方法でテーブルが行パーティション化されます。