2009-08-21 3 views

答えて

3

インデックスの作成には、テーブルスキャンを行うよりも時間がかかります。つまり、一度だけ実行している単一のクエリが単なるテーブルスキャンであれば、インデックスを追加する方が処理速度が遅くなります。

ただし、単一のクエリが単なるテーブルスキャンではない場合、インデックスを追加する方が高速になる場合があります。たとえば、索引がない場合、データベースは結合された行ごとに1回、多数の表スキャンを結合を実行することがあります。おそらく索引はもっと速くなるでしょう。

私はそれをベンチマークすると言っていますが、一度だけ実行しようとしている1回限りのクエリでは馬鹿げています。

+0

INDEXがないと、SELECTはテーブルスキャンを行います。新しいINDEXを使用すると、そのインデックスをデータベースに保存するために一度に遅くなります。 – Galaxy

+1

テーブルスキャンは通常O(n)です。索引は一般的にはツリーなので、索引の作成はO(n)+ O(n * log(n))[n =行数]より高速ではありません。 – derobert

0

2つの可能な値しか持たない列の設定とインデックスを検討する場合、インデックスとしての努力をする価値はありませんが、改善はほとんどありません。索引は、一意性が高く、特定の値または範囲に対して頻繁に問い合せられる列で有効です。他のハードインデックスでは挿入と更新が遅くなるので、この場合はスキップする必要があります。

+1

インデックスは、2つの値のみを持つ列の場合はそれに見合った値になります。たとえば、大量の行を持つ表があり、ブール値フラグに「処理が必要か」というフラグがあります。たいていのものが処理を必要としないと仮定すると、索引は「処理が必要なものを探す」クエリを大幅に高速化します。一般に、インデックスは、セットの全体的なカーディナリティに関係なく、まれな値を見つけるのに適しています。 (非常に高い基数は*すべての*値がまれである特殊なケースです) – derobert

+0

したがって、何度も何度も2つの可能性(約100 k)がある場合、INDEXを作成する必要がありますか? – Galaxy

+1

...希少性は、テーブルへのランダムなアクセスがシーケンシャルアクセスと比較してどれほど高価であるかなど、多くの要素に応じて1-10%未満と定義されています。 – derobert

関連する問題