ようこそ ゲスト さん、新規登録(無料)して気になる疑問を解決しませんか?

質問

質問者:noname#22928 INDEXの使用するポイント
困り度:
  • すぐに回答を!
テーブルを作成するにあたりどこまでインデックスを設定していいのかが解りません…。

たとえばID,DATE,NAME,COMMENT,ADDRESSでテーブルを作成したとしてIDをプリマリーとします。
そして目的としては全ての項目で検索する可能性があるとします。
その場合どれをインデックスに設定するのがベストなのでしょうか?
全部(IDはプリマリーななので必要なし?)の場合はINDEXを設定する必要もないのでしょうか?
むしろしない方がいいのでしょうか?

また、NAMEだけは検索する事は無いといった場合はどうなるのでしょうか?
その場合も過半数以上設定する場合はかえって遅くなるかもしれないし必要ないとかあるんでしょうか?

また、
質問投稿日時:07/01/10 12:26
質問番号:2656090
この質問に対する回答は締め切られました。
最新から表示回答順に表示良回答のみ表示

回答

良回答10pt

回答者:semona 質問がちょっと漠然としているので
回答が漠然となってしまいます。

今回の質問に対する回答だけをすれば
設定する必要はないのではないでしょうか?
もしくはインデックスというものを張ってみたいというのであれば
一番多い検索方法の時に使用する項目にインデックスを
張ってはどうかと...

質問に上がっているテーブルが予め格納されており
今後増える事がないデータであるのであれば良いのですが
頻繁に増減が発生するのであれば
インデックスを張り過ぎると更新系のSQLが遅くなります。
(インデックスとは実際のテーブルデータとは別のものなので
 2テーブル更新しにいくイメージだと思って下さい)

結局綺麗にインデックスを張ろうと思ったら
実際に何万回も検索、更新のテストを行って
調整していく事になります。
その際はインデックスとは何ぞやという事にならないよう
「ssm3u」さんが言った辺りを参考にしてはどうかと思います
種類:アドバイス
どんな人:専門家
自信:参考意見
回答日時:07/01/10 19:41
回答番号:No.2
この回答へのお礼2テーブル更新しにいくイメージはかなり解りやすい例えですね〜。
ありがとうございます。

回答

良回答20pt

回答者:ssm3u 適切な インデックスを設定するためには、
インデックスに対するある程度の知識が必要になります。

http://www.postgresql.jp/document/pg820doc/html/indexes.html
(バージョンによって多少内容が違うかもしれません)

サイト内の下記3つが、お薦めです。
11.2. インデックスの種類
11.5. 一意インデックス
11.9. インデックス使用状況の検証

実際にどのようなデータが入るのかが重要なポイントであると思いますので、
「ここに付けましょう」といった回答はしたくないのですが・・・
・データが件数があまり多くない。
・NAME,COMMENT,ADDRESS 列あたりには文字列が入る(varchar型?)
のであれば、INDEX はプライマリーキー(ID)のみとして、
他のINDEXを考えるよりも、定期的に VACUUM ANALYZE することをお薦めします。

いかがでしょう・・・
質問者様のレベルがわからず、陳腐な回答でありましたら申し訳ない。
種類:アドバイス
どんな人:専門家
自信:参考意見
回答日時:07/01/10 18:52
回答番号:No.1
この回答へのお礼すみません。
自分もどううまく質問していいか解らずでして…。
目的などは解るのですが、必要か必要でないかの境界線が今いち見えずでして…。
 
最新から表示回答順に表示良回答のみ表示