インデックスを再構築する必要がある大きなテーブルがあります。テーブルは Clustered Column Store Index (CCI) で構成されており、特定のユース ケースに従ってデータを並べ替える必要があることに気付きました。
ユーザーは日付範囲と等価クエリを実行しますが、データが希望どおりに並べ替えられていないため、クエリは最適ではありません。SQL アドバイザリ チームは、データを適切な行グループに編成することを推奨しました。これにより、クエリは行グループの削除から利益を得ることができます。
テーブルの説明:
- Timestamp1 による分割、月間 PF
- 合計行: 310 億
- 推定行サイズ: 60 バイト
- 推定テーブル サイズ: 600 GB
テーブル定義:
CREATE TABLE [dbo].[Table1](
[PkId] [int] NOT NULL,
[FKId1] [smallint] NOT NULL,
[FKId2] [int] NOT NULL,
[FKId3] [int] NOT NULL,
[FKId4] [int] NOT NULL,
[Timestamp1] [datetime2](0) NOT NULL,
[Measurement1] [real] NULL,
[Measurement2] [real] NULL,
[Measurement3] [real] NULL,
[Measurement4] [real] NULL,
[Measurement5] [real] NULL,
[Timestamp2] [datetime2](3) NULL,
[TimeZoneOffset] [tinyint] NULL
)
CREATE CLUSTERED COLUMNSTORE INDEX [Table1_ColumnStoreIndex] ON [dbo].[Table1] WITH (DROP_EXISTING = OFF)
GO
環境:
- SQL Server 2014 エンタープライズ版。
- 8 コア、32 GB RAM
- VMWare ハイ パフォーマンス プラットフォーム
私の戦略は次のとおりです。
- 既存の CCI を削除する
- 適切な列で通常のクラスター化された行インデックスを作成します。これにより、データが並べ替えられます
- DROP EXISTING = OFF で CCI を再作成します。これにより、既存の CRI が CCI に変換されます。
私の質問は次のとおりです。
- インデックスを再構築したり、単にデータをリロードしたりすることは理にかなっていますか? リロードが完了するまでに 1 か月かかる場合がありますが、インデックスの再構築にも同じくらい時間がかかる場合があります。
- 既存の CCI を削除すると、圧縮されなくなる可能性があるため、テーブルが拡張されますか?