回答:
テーブルのクラスター化インデックスに圧縮(ページまたは行)を設定した場合、それはテーブルに圧縮を設定することと同じですか?
はい。
MSDNから:
REBUILD WITH構文を使用して、パーティション分割テーブルのすべてのパーティションを含むテーブル全体を再構築します。テーブルにクラスター化インデックスがある場合、REBUILDオプションはクラスター化インデックスを再構築します。
SQL Serverは両方を実行するためのオプションを提供し、それらは異なることを示唆しています
両方の構文が存在する理由は、テーブルに必ずしもクラスター化インデックスがあるとは限らないためです。言い換えるとALTER INDEX ALL ON ... REBUILD
、ヒープには影響しません(ただし、クラスター化されていないものすべてに影響します)ので、他のルートがその目的を果たします。
また、ドキュメントでは明示的にそのように述べてALTER TABLE ... REBUILD
いませんが、構文ではテーブルのすべての非クラスター化インデックスの圧縮を有効/無効にしません。ヒープまたはクラスター化インデックスにのみ影響します。
最後に、これをSSMSでテストしている場合は、圧縮を無効にするとエラーが発生する可能性があることに注意してください。実際に何が行われているのかを確認できるようにスクリプトを実行してください。
クラスタ化インデックスはテーブルです。したがって、どちらに設定しても同じです。ここで両方のケースを比較することでこれを検証できます。
SELECT OBJECT_NAME(p.object_id),*
FROM sys.partitions AS p
INNER Join sys.indexes AS i
ON p.object_id = i.object_id
AND p.index_id = i.index_id
WHERE p.data_compression > 0;
SQL Serverには、列を一意にするいくつかの方法もあります。
CREATE TABLE dbo.foo1(bar INT UNIQUE);
...または...
CREATE TABLE dbo.foo2(bar INT, CONSTRAINT x2 UNIQUE(bar));
...または...
CREATE TABLE dbo.foo3(bar INT);
ALTER TABLE dbo.foo3 ADD CONSTRAINT x3 UNIQUE(bar);
...または...
CREATE TABLE dbo.foo4(bar INT);
CREATE UNIQUE INDEX x4 ON dbo.foo4(bar);
これらはすべて、同じ基盤となる実装(名前は異なります)になります。
仕事に就くためのさまざまな方法があるからといって、まだオフィスにいるわけではありません。:-)