sql >> データベース >  >> RDS >> Sqlserver

非クラスター化インデックスは、インデックスに含まれていない列をどのように出力できますか

    テーブル自体が クラスター化されている 場合 の場合、すべてのセカンダリ インデックスにはクラスタリング キー (クラスタ化されたテーブル内の行の物理的な順序を決定するキー) のコピーが含まれます。

    理由:クラスター化されたテーブルの行は、(テーブル ヒープではなく) B ツリー内に物理的に格納されるため、移動できます。 B ツリー ノードが分割または合体する場合、セカンダリ インデックスに行の「ポインター」だけを含めることはできません (行の移動後に「ぶら下がる」危険があるため)。

    多くの場合、これはパフォーマンスに悪影響を及ぼします - セカンダリ インデックスを介してクエリを実行するには、ダブル ルックアップが必要になる場合があります :

    • まず、セカンダリ インデックスを検索してクラスタリング キーを取得します。
    • 次に、上記で取得したクラスタリング キーに基づいて、クラスタ化されたテーブル自体 (B ツリー) を検索します。

    ただし、クラスタリング キーのフィールドだけが必要な場合は、最初の検索のみが必要です。

    MS SQL Server の別名「クラスター化インデックス」。

    通常、必ずしも MS SQL Server の PRIMARY KEY ではありません。

    残念なことに、MS SQL Server ではデフォルトでクラスタリングがオンになっています。多くの場合、クラスタリングの影響を十分に考慮せずにデフォルトのままにしておきます。クラスタリングが適切でない場合は、NONCLUSTERED キーワードを明示的に指定してオフにする必要があります。



    1. jsonフィールドタイプpostgresqlでnull値をクエリする方法は?

    2. UTL_FILE.FREMOVE例:Oracleでファイルを削除する

    3. MySQLで行を非アクティブにする

    4. Oracleから見た文字列の実際の長さ