web-dev-qa-db-ja.com

SQLのインデックスとは何ですか?

SQLの index とは何ですか?明確に理解するために説明や参照をすることができますか?

どこでインデックスを使うべきですか?

376
Surya sasidhar

データベース内の検索を高速化するためにインデックスが使用されます。 MySQLはこの件に関していくつかの良いドキュメントを持っています(他のSQLサーバにも関連しています): http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html

インデックスを使用して、クエリ内の特定の列に一致するすべての行を効率的に検索してから、テーブルのそのサブセットのみを検索して完全一致を見つけることができます。 WHERE節のどの列にもインデックスがない場合、SQLサーバーはテーブル全体を調べて、一致するかどうかを確認するためにすべての行をチェックする必要があります。 。

インデックスはUNIQUEインデックスにすることもできます。つまり、その列に重複する値を含めることはできません。また、一部のストレージエンジンでは、データベースファイルのどこに値を格納するかを定義するPRIMARY KEYも可能です。

MySQLでは、クエリがインデックスを使用するかどうかを確認するために、EXPLAINステートメントの前にSELECTを使用できます。これはパフォーマンスの問題をトラブルシューティングするための良いスタートです。ここでもっと読んでください: http://dev.mysql.com/doc/refman/5.0/en/explain.html

321
Emil Vikström

クラスタ化インデックスは、電話帳の内容のようなものです。この本を 'Hilditch、David'で開くと、すべての 'Hilditch'のすぐ隣にあるすべての情報を見つけることができます。ここでは、クラスタ化インデックスのキーは(姓、名)です。

これにより、すべてのデータが隣接して配置されるため、範囲ベースのクエリに基づいて大量のデータを取得するのにクラスタ化インデックスが最適になります。

クラスタ化インデックスは実際にはデータの格納方法に関連しているため、テーブルごとに1つしか存在しません(ただし、複数のクラスタ化インデックスをシミュレートすることはできます)。

非クラスタ化インデックスは、それらの多くを持つことができ、次にクラスタ化インデックスのデータを指すという点で異なります。例えば、キーが押されている電話帳の後ろにあるクラスタ化されていないインデックス(町、住所)

「ロンドン」に住んでいるすべての人を電話帳で検索する必要があるとします。クラスタ化インデックスのみでは、クラスタ化インデックスのキーがオンになっているので、電話帳のすべての項目を検索する必要があります。その結果、ロンドンに住んでいる人々はインデックス全体にランダムに散らばっています。

(町)に非クラスタ化インデックスがある場合、これらのクエリははるかに速く実行できます。

それが役立つことを願っています!

151
Dave Hilditch

非常に良い例えは、データベース索引を本の中の索引と考えることです。あなたが国に関する本を持っていて、あなたがインドを探しているならば、なぜあなたがちょうどあなたがちょうどあなたがちょうど後部のインデックスに行くことができるとき、全本 - データベース専門用語における全表スキャンと同等です - これはあなたがインドに関する情報を見つけることができる正確なページを教えてくれるでしょう。同様に、ブックインデックスにはページ番号が含まれているので、データベースインデックスにはSQLで検索している値を含む行へのポインタが含まれています。

もっとここに

134
Arun Kumar M

インデックスは、クエリのパフォーマンスを向上させるために使用されます。これは、訪問/スキャンが必要なデータベースデータページの数を減らすことによって行われます。

SQL Serverでは、 clustered インデックスによってテーブル内のデータの物理的な順序が決まります。テーブルごとに1つのクラスタ化インデックスのみが可能です(クラスタ化インデックスISテーブル)。テーブル上の他のすべてのインデックスは、ノンクラスタードと呼ばれます。

78
Mitch Wheat

インデックスは、データをすばやく見つけるためのものです。

データベースのインデックスは、本の中で見つけたインデックスと似ています。本に索引があり、その本の中で章を見つけるようにお願いしますが、索引の助けを借りてそれをすぐに見つけることができます。一方、本に索引がない場合は、本の最初から最後までの各ページを見て、章を探すのにより多くの時間を費やす必要があります。

同様に、データベース内の索引は、照会がデータを素早く見つけるのに役立ちます。あなたがインデックスに慣れていないならば、以下のビデオは非常に役に立つことができます。実際、私はそれらから多くのことを学びました。

インデックスの基本
クラスタ化インデックスと非クラスタ化インデックス
ユニークインデックスと非ユニークインデックス
インデックスの長所と短所

41
Suresh

一般的なインデックスではB-treeです。インデックスには、クラスタ化インデックスと非クラスタ化インデックスの2種類があります。

Clustered indexは物理的な行の順序を作成します(1つだけでよく、ほとんどの場合は主キーでもあります。テーブルに主キーを作成する場合は、このテーブルにもクラスタインデックスを作成します)。

ノンクラスタード indexもバイナリツリーですが、行の物理的な順序は作成されません。したがって、非クラスタ化インデックスのリーフノードには、PK(存在する場合)または行インデックスが含まれています。

インデックスは検索速度を上げるために使用されます。複雑さはO(log N)のためです。索引は非常に大きく興味深いトピックです。大規模なデータベースでインデックスを作成することは、ある種の芸術であることもあります。

22
Voice

INDEXES - データを簡単に見つける

UNIQUE INDEX - 重複値は許されません

INDEXの構文

CREATE INDEX INDEX_NAME ON TABLE_NAME(COLUMN);

UNIQUE INDEXの構文

CREATE UNIQUE INDEX INDEX_NAME ON TABLE_NAME(COLUMN);
19
RAGU

INDEXはデータ検索プロセスを高速化するパフォーマンス最適化手法です。テーブル(またはビュー)からデータを取得する際のパフォーマンスを向上させるために、テーブル(またはビュー)に関連付けられた永続的なデータ構造です。

インデックスベースの検索は、クエリにWHEREフィルタが含まれている場合に特に適用されます。そうでなければ、すなわち、WHEREフィルタなしのクエリは、データ全体および処理を選択する。 INDEXなしでテーブル全体を検索することをテーブルスキャンと呼びます。

あなたは明確かつ信頼性の高い方法でSql-Indexesの正確な情報を見つけることができます。以下のリンクに従ってください:

  1. Cocnept-賢明な理解のために: http://dotnetauthorities.blogspot.in/2013/12/Microsoft-SQL-Server-Training-Online-Learning-Classes-INDEX-Overview-and-Optimizations.html
  2. 実装に関する理解のために: http://dotnetauthorities.blogspot.in/2013/12/Microsoft-SQL-Server-Training-Online-Learning-Classes-INDEX-Creation-Deletetion-Optimizations.html

最初に、通常の(インデックス作成なしの)クエリの実行方法を理解する必要があります。それは基本的に各行を一つずつ横断し、それが返すデータを見つけた時にそれを返します。次の図を参照してください。 (この画像はこの video から取られたものです。)

Without indexing それで、クエリが50を見つけることであると仮定すると、49のレコードを線形検索として読み込む必要があります。

次の図を参照してください。 (このイメージはこれから取られた ビデオ

enter image description here

インデックス付けを適用すると、バイナリ検索のように各トラバーサルのデータの半分を削除するだけで、クエリはデータを読み取ることなくデータをすばやく見つけ出します。 MySQLのインデックスは、すべてのデータがリーフノードにあるBツリーとして格納されています。

10
Kravi

SQL Serverを使用している場合、最も優れたリソースの1つは、インストールに付属の独自のBooks Onlineです。 SQL Server関連のトピックについては、これが1番目の場所です。

それが現実的なら「どうすればいいの?」そうした質問には、StackOverflowをお勧めします。

また、私はしばらくの間戻っていませんでしたが、sqlservercentral.comはそこにトップSQL Server関連サイトの1つでした。

7
cloneofsnake

index はいくつかの異なる理由で使用されます。主な理由は、クエリを高速化してローを取得したり、ローをソートしたりできるようにすることです。もう1つの理由は、他の列が同じ値を持たないことを保証する主キーまたは一意索引を定義することです。

6
Senseful

インデックス付けは、複数のフィールドで多数のレコードをソートする方法です。テーブル内のフィールドにインデックスを作成すると、フィールド値を保持する別のデータ構造と、関連するレコードへのポインターが作成されます。次に、このインデックス構造が並べ替えられ、バイナリ検索を実行できるようになります。

SQLインデックスの詳細についてはこちら をご覧ください。

1
Ajmal M.P.