クラスター化インデックスを無効にすると、テーブルにアクセスできなくなるのはなぜですか?


11

インデックスが無効になると、定義はシステムカタログに残りますが、使用されなくなります。SQL Serverはインデックスを維持せず(テーブルのデータが変更されるため)、インデックスを使用してクエリを満たすことはできません。場合はクラスタ化インデックスが無効になっている、テーブル全体がアクセスできなくなります。

Bツリーを破棄してテーブルから直接データにアクセスできないのはなぜですか?(おそらくテーブルを行ごとにスキャンすることにより)データに完全にアクセス不能にするよりも適切でしょうか?

それは純粋に理論的な質問です-私は実際にはそうしません。それはシナリオでも、やることでもありません。なぜそうなるのかを知りたいのですが、内部的な問題だと考えてください。

回答:


10

Bツリーを破棄してテーブルから直接データにアクセスできないのはなぜですか?(ほとんどの場合、テーブルを行ごとにスキャンすることにより)、アクセスできないデータよりも適切でしょうか?

あなたの質問に答えるために、インデックス作成の基本がより便利になります-インデックスは、Bツリー構造で編成された一連のページ(インデックスノード)で構成されます。この構造は本質的に階層型であり、ルートノードが階層の最上部にあり、リーフノードが最下部にあります。詳細については、こちらを参照してください

また、多くの人が説明したように、クラスター化インデックス== 1つ以上のキーまたは列で物理的に順序付けされた元のテーブル。そのため、クラスター化インデックスが無効になっていると、そのデータ行にアクセスできません。データを挿入することもできません(非クラスター化インデックスの場合、挿入は成功しますが、これは完全にこの投稿に関連しているわけではありません-ここではクラスター化インデックスについての議論なので)。また、どちらの再編成操作も機能しません。

以下で詳しく説明します。

Adventureworksデータベースを使用して、CLUSTEREDインデックスを無効にした場合の影響を確認します。

ここに画像の説明を入力してください

次に、テーブルの行数を確認します。

ここに画像の説明を入力してください

クラスタ化インデックスを無効にします

ここに画像の説明を入力してください

次に、テーブルから行数を選択します。今回は以下のメッセージでエラーになります:

ここに画像の説明を入力してください

再編成操作でも動作しません!!

ここに画像の説明を入力してください

クラスタ化インデックスを再構築すると、正常に機能するはずです。

ここに画像の説明を入力してください

テーブルを選択して、データにアクセスできるかどうかを確認します

ここに画像の説明を入力してください

つまり、クラスター化インデックスを無効にすると、テーブル内のデータは引き続き存在しますが、DropまたはREBUILD操作以外ではアクセスできなくなります。関連するすべての非クラスター化インデックスとビューは使用できなくなり、テーブルを参照している外部キーも無効になり、テーブルを参照しているすべてのクエリのFAILUREがリードされます。

注:インデックスを有効にするオプションはありません。あなたはそれを再構築する必要があります。


2

B +ツリーのリーフレベルである表。CIを無効にすることで達成したいことは何ですか?データにアクセスできないようにしたくない場合は、これを行わないでください。

SQL Serverでこれができる理由がよくわかりません。

CREATE TABLE T
(
    X INT CONSTRAINT PK PRIMARY KEY CLUSTERED, 
    Y INT CONSTRAINT UQ UNIQUE NONCLUSTERED
);

ALTER INDEX PK ON T DISABLE;

...また、NCIを無効にするので、それSELECTによってカバーされるクエリも無効になります。これのユースケースは思いつきません。- マーティン・スミス

私が頭で考えることができる唯一の用途は、まさに議論されていることです。テーブルを無効にします。dboまたはsysadminに触れたくないテーブルがある場合は、クラスター化インデックスを無効にできます。テーブルはデータとともに存在しますが、クラスター化インデックスを再度有効にするまで完全にアクセスできません。- ケネスフィッシャー

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.