- ベストアンサー
インデックス(index)とはなんでしょうか?仕組みを教えてください。
なんとなくは分かっているのですが、その仕組みが、まだしっくりといってません。 例えば、「zoo」という英単語を辞書で調べる時に、Aから順に総当りでページをめくっていては日が暮れます。その場合、Zに目印をつけておけば、すぐに見つけることができますよね。 インデックスとは、これと似たような仕組みなのでしょうか? もしそうであれば、単語内に、「oo」がある文字を探すにはどうすればよいのでしょうか?総当りで調べていく以外の方法が分かりません。 また、もしインデックスを張ることによって、SELECTの速度が上がるのであれば、なぜ全カラムにインデックスを張らないのでしょうか? インデックスを張るデメリットは何でしょうか?また、インデックスを張るか張らないかの基準は何でしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
インデックスを簡単に説明すると、指定されたキーに基づいてインデックスファイルを作成し、select文等のSQL文を実行するときに利用されます。 。作り方の1つとして、キーに基づいて行を並び替え、その真ん中・真ん中を比較しながら求めていけるようにします。 これで全行検査(n行)より早くなります。(数学的にはlog2(n)のオーダーでしょうか) >もしそうであれば、単語内に、「oo」がある文字を探すにはどうすればよいのでしょうか?総当りで調べていく以外の方法が分かりません。 これに関しては、プログラムで対処する以外、SQL文だけではわかりません。 >また、もしインデックスを張ることによって、SELECTの速度が上がるのであれば、なぜ全カラムにインデックスを張らないのでしょうか?インデックスを張るデメリットは何でしょうか?また、インデックスを張るか張らないかの基準は何でしょうか? 更新や削除が頻繁に行われる場合、インデックスファイルの更新に余分に時間がかかることになります。また、インデックスは、複数のキーからも構成されますから、利用目的に応じて作ることになります。 張るか張らないかの基準は、経験を積みながら対処することになるでしょう。 下記のページが参考になるでしょう。
その他の回答 (1)
- shimix
- ベストアンサー率54% (865/1590)
>インデックスとは、これと似たような仕組みなのでしょうか? 辞書でいえば「見出し」そのものですね。少なくとも見出しが順番に並んでいるという前提があれば、Zに目印があろうがなかろうが索引は便利です。順番に並んでいなければ確実に全件を調べないといけませんよね?昇順に並んでいればたとえば二分検索などですばやくたどり着けます。 >もしインデックスを張ることによって、SELECTの速度が上がるのであれば、 >なぜ全カラムにインデックスを張らないのでしょうか? データの挿入や削除の時に、indexも同時に挿入・削除する必要があります。indexが多くなればそれだけDBサーバの仕事が増えます。なので、あとで検索や連結に使う項目に絞ってindexにします。
お礼
ご回答ありがとうございます。 確かに、複雑な処理が増えるので、INSERTやUPDATEにも付加がかかりますね。 後は経験を積んで、学んでいこうと思います。 ありがとうございました。
お礼
ご回答ありがとうございます。 頂いたURLの > インデックスが付加されているフィールドであっても,LIKE '%AAA' のような「後方一致」を指定すると,インデックスを検索せずにデータ部の全表走査が行われます。 という一文で、indexの正体が、なんとなく何者か分かりました。 極めるためには、やはり > 張るか張らないかの基準は、経験を積みながら対処することになるでしょう。 に尽きると思いました。 ありがとうございました。