SQL Serverの[インデックス]

多くの場合、開発プロセスの際だけでなく、コンタクトデータベースのインデックスに入って来るのインデックスのインデックスのみDBAの知識と理解を知っておく必要があり、私たちは高品質のコードを書くことができます。

  1. インデックスの概要
  2. クラスタ化インデックス
  3. 非クラスタ化インデックス
  4. インデックスのみ
  5. インデックススクリーニング
  6. 非クラスタ化インデックスは、列が含まれています

インデックスの概要

       メインインデックスはデータ検索の速度を向上させるために存在し、インデックスと効率的な設計は、優れたデータベースとアプリケーションのパフォーマンスを得ることが極めて重要です。

       インデックスにはディレクトリ新華辞書を見つけるために持っていない場合、我々は、新華辞書のディレクトリを使用し、通常のように1つ以上の列で、データベーステーブルの値が、ソートされたデータベーステーブルに素早くアクセスするためのインデックスを使用して構造の特定の情報になりますです単語は最初のページから最後のページをめくる持っている必要があり、これはどのように絶望的なものです。

  インデックスはスペースの占有出ているので、実際には余分な費やす必要があり、インデックスデータを使用してクエリを常に考えなければならない、インデックスは定期的なスクリーニングの条件に基づいて構築されるように、畏敬の念を維持する必要があり、治療、時間の典型的な練習スペースですスペースは、インデックスを格納するために、あなたはそれが無駄に手放すことはできません。

 

クラスタ化インデックス

表の行にキーインデックスに基づいて、収集データをソートし、データ行に格納されています。 データ自体を整列するので、各テーブルは、クラスタ化インデックスを持つことができる唯一の配列に格納することができます。  

単純にクラスタ化インデックスの順序で、データの一貫性がある保存、クラスタ化インデックスのリーフ・ノードは、データがあります。

作成のガイドライン

より良いコラム1.定義に使用するクラスタ化インデックスキー

または2.だけ多くのユニークな値が含まれている(一意クラスタ化インデックスを作成するために使用されていない場合には独特の性質を特定の列を、SQL Serverは自動的に4バイトの追加します)

多くの場合、順次データへのアクセスに必要な3

多くの場合、取得したデータをソートするには、テーブルで使用される4。

列サイズは900のバイトを超えていません

クラスタ化インデックスを使用した場合のために

1.オペレータが(例えばBETWEEN、>、> =、<、および<=)一連の値を返します

2.リターン大きな結果セット

3.句をJOIN、一般的に、句の使用は、外部キー列であります

4.ソートORDER BYまたはGROUP BY /パケットデータ(パケットデータが最初としてソートされます)

使用クラスタ化インデックスの場合には適していません

コラム1.頻繁な変更、それぞれの変更は、ページを再構築し続けてインデックスにつながります。

2. A列の数または列の多数の組み合わせ、計算要求をソートする各ビルド

クラスタ化インデックスを作成するには、TSQL

- ユニークなクラスタ化インデックスは
、CREATE  UNIQUEを CLUSTERED  INDEX  [ IX_TableName_Name ]  オン [ DBO ][ テーブル名][ フィールド名]  ASC 

- ユニーククラスタ化インデックス
CREATE  CLUSTERED  INDEXを [ IX_TableName_Name ]  ON  [ DBO ][ テーブル名][ フィールド名]  ASC

 

非クラスタ化インデックス

非クラスタ化インデックスキー値およびポインタテーブルは、インデックスデータ記憶場所行ロケータを含んでいます。 あなたは、テーブルまたはインデックス付きビューで複数の非クラスタ化インデックスを作成することができます。 一般的に、非クラスタ化インデックスは、多くの場合、使用を改善するために設計され、パフォーマンスクラスタ化インデックスのクエリを確立しませんでした。

これは単に、クラスタ化インデックスは、非クラスタ化インデックスではありません。額には、同じことを説明していないようでした。非クラスタ化インデックスのリーフノードはロケータです。

作成のガイドライン

1. 1700のバイトを超えていない(900は他の文書は、私はSQL Serverの1700バイトをテストした、と言うバイト)

が増加するため、インデックスのメンテナンスコストの不要な列を追加することは避けてください。2.

3.インデックスクエリ効率をより有効に活用するように、多くのユニークな値が含まれています

4.カラムの長さできるだけ小さく

非クラスタ化インデックスを使用するための

1. JOINまたはGROUP BY句

2.クエリの大規模な結果セットを返さないでください。

多くの場合、カラム内の検索クエリ条件に含ま3.

非クラスタ化インデックスの場合には適していません

1.列の重複値以下

コラム2.検索条件は、多くの場合、クエリではありません

3.列の長さは増加のため、インデックスメンテナンスコストの、長すぎます

クラスタ化インデックスと非クラスタ化インデックスの差(限られた知識、必ずしもすべて、追加したいと思います)

1.クラスタ化インデックスは、非クラスタ化インデックスの論理順序、物理的な順序に基づいています

2.クラスタ化インデックステーブルには、以上であってもよい唯一の非クラスタ化インデックスを持つことができます

前記リーフノードは、リーフノードは、非クラスタ化インデックスロケータで、インデックスデータをクラスター化しています

前記付加情報は、インデックスをクラスタ化することができない、非クラスタ化インデックスは、追加情報を含んでいてもよいです

非クラスタ化インデックスを作成するために、TSQL

CREATE  INDEX IX_TableName_FieldName ONデータテーブル(フィールド名DESC

 

インデックスのみ

一意のインデックスは、テーブルの各行はいくつかの方法から一意になるようにインデックスキーが重複する値に含まれていないことを保証します。 データのみ自体のユニークな特性は、指定したときに一意のインデックスは、理にかなっています。

重複保証するものではありませんインデックスキー値は(NULL値が含まれています)

作成のガイドライン

 1.のみを使用する場合は、データのみの一意性を確保する必要があります

このユニークなインデックスを使用することを検討してください

1.データの一意性を確保する必要性

一意のインデックスの場合には適していません 

1.データが一意であることが保証する必要はありません

TSQLは、一意のインデックスを作成します

CREATE  UNIQUE  INDEX IX_TableName_FieldName ONデータテーブル(フィールド名ASC

 

インデックススクリーニング

 濾過率は、特にデータクエリの明確に定義されたサブセットから選択データをカバーするために、最適化された非クラスタ化インデックスです。表の行の一部に用いる濾過インデックスフィルタ述語が索引付けされます。

データのみのインデックスの要件を満たすために、インデックスは、テーブルのサブセットに相当します。以下、いくつかの利点を達成するように、

データのインデックスページには、フルテーブルインデックスよりも小さいので、1は、クエリのパフォーマンスが向上します

唯一の条件を満たしているため、インデックスのメンテナンスコストを削減2.インデックス・ページ上で維持されます

3.上記のような理由をストレージコスト指数を削減

作成のガイドライン

1.スクリーニング条件は、明示的な値でなければなりません

フィルタ条件が満たされていると一般的なクエリー2.条件が頻繁に発生します

データの前記サブセットが頻繁に検索されます

濾過インデックスを使用した場合の

テーブルデータの1.定期的なスクリーニングのサブセット、例えば、通常我々のみ有効なクエリの受注、少量の注文の無効チェック、または実質的に存在しない調査、フィルターインデックスの確立のため、この場合、

2.チェックのみ最新のデータは、例えば、単にクエリの効率を加速し、先月のレコードをチェックすると、データベースのアイドル時間に維持し、定期的に再スクリーニング指標によって達成することができます

インデックスケースをスクリーニングには適していません

(他の指標は、カバーはありません)1.多くの場合、クエリは、フィルタ値が含まれているが、これは全表スキャンを取るためにリードしてきました

2.クエリは固定されていません

TSQLは、一意のインデックスを作成します

CREATE  INDEX IX_TableName_FieldName ON  [ DBO ]を[ テーブル名](フィールド名ASCここで、状態>  1

 

非クラスタ化インデックスは、列が含まれています

 非キー、非クラスタ化インデックスの拡張により、非クラスタ化インデックスのリーフレベルに列を追加します。非キー列を含めることで、あなたはクエリが複数の非クラスタ化インデックスをカバー作成することができます

インデックス内のすべてのデータがページを見つけることがあるため、I / O操作を減らすため、あなたがテーブルのデータページへのアクセスを必要としない、クエリデータをインデックスデータに含まれている時に、インデックスページを維持しながら、列に含まれることで、これは通常、「カバレッジクエリ」と呼ばれ、

作成のガイドライン

1.列は、少なくとも一つのキーを定義する必要があります

2. CREATE INDEX文のINCLUDE句に非キー列を定義します。

3.唯一の非キー列は、テーブルまたはインデックス付きビュー上の非クラスタ化インデックスを定義しました

4.テキスト、ntext型およびイメージ以外のデータのすべてのタイプを可能に

正確または不正確な決定論的計算カラムが含むカラムであってもよいです

6.あなたはINCLUDEリストおよびキー列のリスト内の列名を指定することはできません

7.リストの列名を繰り返すことはできませんINCLUDE

(非キーを含まない)8.索引キー列は、既存のインデックスサイズの制限に従わなければなりません

9.のみINCLUDE句の列指定されたサイズ制限により、すべての非キー列の合計サイズは、例えば、VARCHAR(MAX)カラムを、2 GBに制限されています

非クラスタ化インデックスに適した列が含まれています

1.スクリーニングの列は、列のインデックスキーである&&問合せは、列に含まれています

非クラスタ化インデックスに適していない列が含まれています

2.スクリーニング列は列インデックスキー||クエリが列に含まれていないではありません

フィルターのインデックスを作成するには、TSQL

CREATE   INDEX IX_TableName_FieldName ONデータテーブル(フィールド1 ASC)は、(フィールド2)

 

おすすめ

転載: www.cnblogs.com/WilsonPan/p/12625364.html