このインデックスがあるとします
CREATE INDEX IX_test ON t1(c1) INCLUDE (c2)
これは、インデックスページと実際のデータページの両方にc2があることを意味しますか?本当の問題は、c2を更新するということは、SQL ServerがIX_testと実際のデータ行(クラスター化インデックス)を更新する必要があるということですか?
このインデックスがあるとします
CREATE INDEX IX_test ON t1(c1) INCLUDE (c2)
これは、インデックスページと実際のデータページの両方にc2があることを意味しますか?本当の問題は、c2を更新するということは、SQL ServerがIX_testと実際のデータ行(クラスター化インデックス)を更新する必要があるということですか?
クラスタ化インデックスはテーブルの一部であるため、テーブル自体を更新しているだけです。非クラスター化インデックスの場合、答えは「はい」でした。
CLUSTEREDキー値の論理的な順序によって、テーブル内の対応する行の物理的な順序が決まるインデックスを作成します。クラスタ化インデックスの最下位またはリーフレベルには、テーブルの実際のデータ行が含まれます。テーブルまたはビューには、一度に1つのクラスター化インデックスを使用できます。詳細については、「クラスター化されたインデックス構造」を参照してください。
//編集:別の方法で理解したようです。重要なのは、列を更新する場合は、次のことを更新する必要があるということです。1)クラスター化インデックス2)その列を含むすべての非クラスター化インデックス
dbを設計するときは、作成するインデックスの数/数に常に疑問があります。これは、読み取り速度と書き込み速度(および実際に必要なもの)のバランスの場合です。
はい、インデックスに任意のフィールドを含めるのと同じように、データが重複します。また、フィールドを含むすべてのインデックス (インデックス) は、フィールドが変更されたときに更新する必要があります。
したがって、クエリ (または複数) をカバーするためにインデックスを拡張すると、データが複製されます。それは常にトレードオフです。