79

以前に、テーブルがどのように機能するかを想定して、テーブルに複合インデックス (数学者向けのインデックス) を作成しました私の仮定が正しいかどうかに興味がありました。

インデックスの列の順序をリストするとき、インデックスをグループ化する方法も指定していると思います。たとえば、列ab、およびcがあり、同じ順序a ASCでインデックスを指定するb ASCc ASC、結果のインデックスは基本的に の各「グループ」の多くのインデックスになりますa

これは正しいです?そうでない場合、結果のインデックスは実際にどのようになりますか?

4

4 に答える 4

41

複合インデックスは、辞書の単純なアルファベット インデックスに似ていますが、次のように 2 つ以上の文字をカバーしています。

AA - page 1
AB - page 12

テーブルの行は、最初にインデックスの最初の列で並べられ、次に 2 番目の列で並べられます。

両方の列または最初の列で検索する場合に使用できます。インデックスが次のような場合:

AA - page 1
AB - page 12
…
AZ - page 245
BA - page 246
…

2文字 (テーブル内の列)の検索に使用し= 2たり、1 つの文字の単純なインデックスのように使用したりできます。

A - page 1
B - page 246
…

辞書の場合、ページ自体はアルファベット順に並べられていることに注意してください。CLUSTEREDインデックスの一例です。

単純な非CLUSTERED索引では、ページへの参照は歴史書のように順序付けられます:

Gaul, Alesia: pages 12, 56, 78
Gaul, Augustodonum Aeduorum: page 145
…
Gaul, Vellaunodunum: page 24
Egypt, Alexandria: pages 56, 194, 213, 234, 267

ORDER BY複合インデックスは、 2 つ以上の列を使用する場合にも使用できます。この場合、DESC条項が役立つ場合があります。

DESC複合インデックスで句を使用する方法については、私のブログの次の記事を参照してください。

于 2009-04-27T20:24:17.800 に答える
4

いいえ。結果のインデックスは単一のインデックスになりますが、複合キーがあります。

KeyX = A、B、C、D; KeyY = 1,2,3,4;

インデックス KeyX、KeyY は実際には次のようになります: A1、A2、A3、B1、B3、C3、C4、D2

そのため、KeyXとKeyY で何かを見つける必要がある場合に備えて、高速で単一のインデックスを使用します。SELECT ... WHERE KeyX = "B" AND KeyY = 3 のようなもの。

しかし、理解することが重要です: WHERE KeyX = ? 要求そのインデックスを使用しますが、WHERE KeyY = ? そのようなインデックスはまったく使用しません。

于 2009-04-27T19:59:22.323 に答える