いつ列にインデックスを作成するか、そして何でどのようにして知ることができますか?

StackOverflow https://stackoverflow.com/questions/4093788

質問

さまざまなORMのドキュメントでは、常にインデックスなどを作成する方法を提供します。彼らは常に、効率のために適切なインデックスを作成するように言及しています。 orm。インデックス(PK以外)の私の理解は基本的に次のとおりです。 LIKE 列の内容に基づいてクエリ(つまり、検索)に、その列には全文インデックスを使用する必要があります。インデックス(主に効率に関する)に関して他に何を知っておくべきですか?私のドアステップには知識の世界があるように感じますが、その下に巨大な折り畳まれたマウスパッドが詰まっているので、通り抜けることができません(なぜ私はそれを言う必要があると感じたのかわかりませんが、ソファを提供してくれてありがとう)。

役に立ちましたか?

解決

本の裏にあるインデックスのように非常に大まかにインデックスを考えてください。これは、本の内容とはまったく別の領域です。特定の価値を求めている場合は、インデックスに移動して調べることができます(インデックスが注文されるため、本のすべてのページをスキャンするよりもはるかに速いものを見つけることができます。 )。

インデックスエントリにはページ番号があるため、トピックを求めるページにすばやく移動できます。データベースインデックスは非常に似ています。これは、データベースの関連情報の順序付けられたリスト(インデックスに含まれるフィールド)であり、データベースが一致するレコードを見つけるための情報があります。

したがって、頻繁に検索する必要がある情報がある場合、インデックスを作成します。通常のインデックスは、クエリのような「部分的な」を求めるのに役立ちませんが、フィールドXに特定の値がある場合、DBMSがテーブル全体を「スキャン」する必要がない場合に、一連の結果を取得する必要があるときはいつでも、一致する値を探しています。

また、列でソートする必要がある場合にも役立ちます。

心に留めておくべき別のこと。 DBMSを使用すると、複数のフィールドを持つ単一のインデックスを作成できる場合は、DBMSに固有の効果を調査してください。複数のフィールドを含むインデックスは、これらすべてのフィールドがクエリで使用されている場合にのみ、完全に(またはまったく)役立つ可能性があります。逆に、インデックスごとに1つのフィールドを持つ単一のテーブルの複数のインデックスを持つことは、複数のフィールドによってフィルタリング/ソートされているクエリに対してあまり役に立たない(または任意の)ヘルプではない場合があります。


全文インデックスとPK(プライマリキー)に言及しました。これらは通常のインデックスとは異なりますが、同様の目的を果たすことがよくあります。

まず、一次キーは通常、インデックス(MSSQL、「クラスター化されたインデックス」)であることに注意してください。しかし、これは具体的にはそうである必要はありません。例として、MSSQL PKはデフォルトでクラスター化されたインデックスです。クラスター化されたインデックスは、他の場所に保存されている別のデータではないという点で特別ですが、データ自体はクラスター化されたインデックスによって順番にテーブルに配置されています。これが、人気のあるPKがAにある理由です int シーケンシャルで増加する値で自動生成される値。したがって、クラスター化されたインデックスは、フィールドの値によって特にテーブル内のデータをソートします。これを従来の辞書と比較してください。エントリ自体は「キー」によって順序付けられます。これは定義されている単語です。

ただし、MSSQLでは(情報のDBMSドキュメントを確認してください)、必要に応じて、クラスター化されたインデックスを別のフィールドに変更できます。時々これはオンで行われます datetime ベースのフィールド。


全文インデックスは、異なる種類の獣です。彼らは同じ原則のいくつかを使用していますが、彼らがしていることは、私が説明している通常のインデックスとまったく同じではありません。また:いくつかのDBMSで、 LIKE クエリはそうします いいえ 全文インデックスを使用します。特別なクエリ演算子が必要です。

これらのインデックスは、列の値全体を見つける/並べ替えることではなく、テキストフィールド内の個々の単語/フレーズを見つけることではなく、列の値全体を見つける/並べ替えることではありません。インデックス化されています。

また、多くの場合、同様の単語、異なる時制、一般的なスペルミスなどを検索することができ、通常はノイズワードを無視できます。彼らが働くさまざまな方法は、彼らがそれらを使用するために異なる演算子を必要とする理由です。 (繰り返しますが、DBMSのローカルドキュメントを確認してください!)

他のヒント

この答えはOracle特有ですが、回答の主なポイントはほとんどのリレーショナルデータベースシステムに適用されます

Oracleインデックスを選択して最適化する方法は?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top