SQL serverデータベースの「インデックス」の詳細


インデックスとは?データベース内のインデックスは書籍内のディレクトリと同様で、インデックスはSQL Serverにデータの内部メソッドを編成させ、SQL Serverにクエリーデータのルーティングを編成する方法を提供します.
インデックス・ページは、データにインデックスを格納するデータ・ページです.インデックス・ページには、データ行を取得するキー・ページと、そのデータ行のアドレス・ポインタが格納されます.インデックスを使用することで、データベースの取得速度を大幅に向上させ、データベースのパフォーマンスを改善できます.
索引の分類1、一意索引
ユニークなインデックスでは、2つのローが同じインデックス値を持つことはできません.ユニークコンストレイントが作成され、ユニークインデックスが自動的に作成されます.一意のインデックスは情報を見つけるのに役立ちますが、最適なパフォーマンスを得るためには、プライマリ・キー制約を使用することをお勧めします.2、主キー索引
データベース関係図でテーブルにプライマリ・キーを定義すると、プライマリ・キー・インデックスが自動的に作成されます.プライマリ・キー・インデックスは一意のインデックスの特殊なタイプです.プライマリ・キー・インデックスは、プライマリ・キーの各値が一意であることを要求します.クエリーでプライマリ・キー・インデックスを使用すると、データへの迅速なアクセスも可能になります.3、集約インデックス
集計インデックスでは、テーブル内のローの物理的順序は、キー値の論理(インデックス)順序と同じです.
4、非集計インデックス
非集計インデックスは、インデックス・ページに作成され、データのクエリー時にインデックスからレコードが格納されている場所を見つけることができます.非集計インデックスは、テーブル内の各行のデータが格納される物理的順序とキー値の論理的順序を一致させず、集計インデックスは非集計インデックスよりも高速なデータアクセス速度を有する.例えば、筆画順のインデックスは非集約インデックスであり、「1」画の字(語)に対応するページ番号は、「3」画の字(語)に対応するページ番号よりも大きい(後ろ)可能性がある.
SQL Serverでは、1つのテーブルに1つの集計インデックスしか作成できませんが、複数の非集計インデックスを作成できます.カラムをプライマリ・キーに設定すると、デフォルトでは集約インデックスになります.
5、複合索引
インデックスを作成するときは、1つのカラムにのみインデックスを作成できるわけではありません.プライマリ・キーを作成するのと同じように、複数のカラムをインデックスに組み合わせることができます.このインデックスを複合インデックスと呼びます.このインデックスは、複合インデックスに使用される最初のカラムまたは複合インデックスカラム全体が条件としてデータクエリを完了した場合にのみ使用されることに注意してください.
6、全文索引
全文インデックスは、SQL Serverの全文エンジンサービスによって作成され、維持されるタグベースの特殊なタイプの機能インデックスです.全文インデックスは主に大量のテキストの中で文字列を検索するために用いられ、この時全文インデックスを使用する効率はT-SQLのLIKEキーワードを使用する効率より大幅に高い.
SQL serverのグラフィック化操作のため、インデックスを作成するのは比較的に簡単で、作成の手順を省略して、インデックスを作成した後に、辞書を調べる時ピンインの方式あるいは筆画の方式を選ぶようにすることができて、SQL serverデータのクエリのインデックスのクエリの方式を指定して、T-SQL文は以下の通りです:
select * from xueyuan                                             #      
with (index=ix_name)                                             #        
where       like ' %'                                       #    

SQL serverがどのインデックスでクエリーを行うかを指定できますが、一般的には手動で指定する必要はありません.SQL serverは作成したインデックスに基づいてクエリーを自動的に最適化します.
インデックスを使用すると、データの取得速度が速くなりますが、カラムごとにインデックスを作成する必要はありません.インデックス自体もメンテナンスが必要であり、一定のリソースを消費するため、インデックスを作成するカラムを以下の基準で選択できます.
  • 頻繁に検索されるカラム.
  • は、選択されたカラムをクエリーするためによく使用されます.
  • 頻繁に並べ替えられ、グループ化された列.
  • は、接続されたカラム(プライマリ・キー/外部キー)によく使用されます.

  • 次のカラムを使用してインデックスを作成しないでください.
  • は、いくつかの異なる値列のみを含む.
  • テーブルには数行しか含まれていません.SQL Serverがインデックス内でデータを検索するのにかかる時間は、テーブル内でロー単位で検索するよりも長いため、スモール・テーブルのインデックスを作成するのはお得ではありません.

  • SQL文、特にselect文でインデックスを正しく使用すると、クエリーの速度が大幅に向上し、アプリケーションの実行性能が保証されます.参考までにいくつかの経験を提供します.
  • クエリーでは、「アスタリスク」を使用してすべてのカラムを返すのを最小限に抑え、不要なカラムを返さないでください.
  • インデックスは、できるだけ小さく、バイト数の小さいカラムにインデックスを作成する必要があります.
  • where文に複数の条件式がある場合、インデックス列を含む式は他の式の前に置く必要があります.
  • order by文で式を使用しないでください.
  • は、業務データの発生頻度に応じて、定期的にインデックスを再生成または再組織し、フラグメント整理を行う.(SQL serverでは、インデックスデータはシステムによって自動的にメンテナンスされるため、データの追加、削除、修正後にインデックスデータが更新される可能性がある.長期にわたる頻繁なデータ更新に伴い、インデックスデータはディスクの異なる位置に分散して断片化し、それによって問い合わせ速度がますます遅くなるため、データ更新の頻度に応じて、定期的に既存のインデックスを削除し、再び同じインデックスを作成し、連続したスペースにインデックスを格納してフラグメントを削除することで、クエリーの速度を向上させます.)