2

かなり大量のデータを SQL Server データベースにインポートしています。ソース データは PgSql (テーブル定義を含む) に由来し、かなり単純な正規表現を使用して TSql に変換します。これにより、主キーのないテーブルが作成されます。

私の知る限り、主キー/クラスタリング インデックスがないということは、データがヒープに格納されていることを意味します。

インポートが完了したら、次のように PK を追加します。

ALTER TABLE someTable ADD CONSTRAINT PK_someTable PRIMARY KEY (id);

CLUSTEREDキーワードがないことに注意してください)。今何が起こっているのですか?まだ山?主キーによるルックアップへの影響は何ですか? これは、標準のインデックスを追加することと本当に違いますか?

ここで、代わりに次のように PK を追加するとします。

ALTER TABLE someTable ADD CONSTRAINT PK_someTable PRIMARY KEY CLUSTERED (id);

これにより、テーブルが行ベースの構造に完全に再構築され、PK によるルックアップがより効率的になりますが、挿入特性はあまり望ましくないと思います。

私の仮定は正しいですか?

インポートでデータが PK 順に挿入される場合、そもそも PK を省略してもメリットはありますか?

4

3 に答える 3

1

SQL Server では、クラスター化インデックスが存在しない場合、主キーは既定でクラスター化されます。クラスター化されたインデックスは、実際には、"インデックス" が (非クラスター化インデックスのように) 別のストレージ領域に保持されていないことを意味しますが、インデックス データは、対応する通常のテーブル データと "散在" しています。これについて考えると、それらが 1 つのクラスター インデックスにしかできないことがわかります。

クラスター化されたインデックスの本当の利点は、データがインデックス データの近くにあるため、ドライブ ヘッドが「領域内」にある間に両方を取得できることです。クラスタ化インデックスは、処理しているデータが参照の局所性を示す場合 (ほぼ同じ値の行が同時に読み取られる傾向がある場合)、非クラスタ化インデックスよりも著しく高速です。

たとえば、プライマリ キーが SSN の場合、SSN に関してランダムに並べられたデータを処理しない限り、大きな利点は得られませんが、データが近いため利点は得られます。ただし、SSN によって入力を事前に並べ替えることができる場合、クラスター化されたキーは大きな利点です。

そうです、クラスター化インデックスはデータを並べ替えて、クラスター化インデックスと混在するようにします。

于 2013-08-30T18:53:09.333 に答える