1

データベースのインデックスについて読んでいました。

まず、元のテーブルがあります。次に、別のテーブル (インデックス テーブル) を追加します。このテーブルは、最初のテーブルに行を追加するたびに、インデックス テーブルのどこに挿入するか (アルファベット順など) を把握するように努めます。次に、あるレコードを検索するときに、検索の問題を O(n) ではなく O(log) に変換するインデックス テーブルを使用します。

私の質問は次のとおりです。元のテーブルでその努力をしないのはなぜですか?. 少なくとも、そのテーブルにインデックスが 1 つしかない場合。それ以上ある場合は、インデックスのテーブルのアイデアを適用します。少なくとも、この考えは私が読んだ文献には一度も言及されておらず、おそらく正当な理由があると思いました.

4

2 に答える 2

1

この投稿にはいくつかの非常に便利なリンクがあります:SQLサーバーのインデックス、内部動作、インデックスの構造

簡単な答え:テーブルのクラスター化インデックスは、元のテーブル自体を並べ替えるため、個別のマッピングを作成しないでください。他のインデックスは、クラスター化されたものの行IDへのマッピングを作成します。これは、読んでいるDBによって異なる場合があります。

于 2012-06-16T14:27:12.550 に答える
0

これは通常、データベースでインデックスが作成される方法ではありません。通常、テーブルにはインデックスがあり、クエリが許可されている場合、データベース サーバーは自動的に最適なインデックスを使用しようとしNameます。名前が完全一致( = 'foo')の場合、インデックスが使用されます。特定の文字列 ( ) で始まるクエリを実行したLIKE 'foo%'場合、インデックスの使用が選択される場合があります。一方、インデックス付きの列に部分文字列 ( LIKE '%foo%') が含まれるクエリを実行すると、そのインデックスを使用できず、テーブル全体をスキャンする必要があります。

于 2012-06-16T14:20:50.553 に答える