かなり大量のデータを 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 を省略してもメリットはありますか?