• 締切済み

インデックスを使用して・・・

おはようございます。 SQLServerのテーブルに格納された情報が多いので インデックスを用いて検索処理を早めたいと考えました。 ---テーブル構成-------------- name / varchar address / varchar age / int ---------------------------- name,addressフィールドにインデックスを指定したのですが、 インデックスを指定することにより検索するSQL文に なにか特別な書き方をしなくてはいけないのでしょうか? select name, address, age from test_table; ってSQLを記述しただけでは、 インデックスを作成する前と後では意味はないのでしょうか? 宜しくお願い致します。m(_ _)m

みんなの回答

  • muyoshid
  • ベストアンサー率72% (230/318)
回答No.3

こんにちわ。 > インデックスは定義するだけで、SQL文にとくに特別記述しなくても > かってにインデックスを使って検索を行ってくれるということでしょうか? そうです。 但し、どのような操作を行うのかによって、インデックスの付け方を 設計してやる必要があります。 闇雲に索引を定義すると、データベースの更新性能が劣化するので 気を付けて下さい。

  • muyoshid
  • ベストアンサー率72% (230/318)
回答No.2

こんにちわ。 そうですね。 nanashinogombei さんもおっしゃられていますが、検索条件を指定 しないとインデックスを定義していてもRDBMS としてはインデックスを 使用しません。 一般的に、インデックスの有無はRDBMS が透過的に処理を行ってくれますので、 インデックスを定義すれば、RDBMS が使用可能なインデックスを使って 検索を行ってくれます。 但し、今回のように検索条件が指定されていない場合は、いくらインデックス を定義しても意味がありません。 一般的に、インデックスは大量のデータの中から少量のデータを検索する 際に有効となります。 指定した検索条件が、レコードの大部分に合致するような場合では 逆にインデックスを使用しない方が高速に検索が行える事もあります。

653
質問者

お礼

返信ありがとうございます。 >インデックスの有無はRDBMS が透過的に処理を行ってくれますので、 >インデックスを定義すれば、RDBMS が使用可能なインデックスを使って >検索を行ってくれます。 インデックスは定義するだけで、SQL文にとくに特別記述しなくても かってにインデックスを使って検索を行ってくれるということでしょうか?

noname#4564
noname#4564
回答No.1

  まず、インデックスの設定が妥当で合理的なものなのか検討が必要です。 一般的には検索時のWHERE条件で使用される列で、かつ絞込みの大きい項目に 設定します。 select name, address, age from test_table; ↑コレだと全件抽出ですよね?(^^; (インデックスがどうこうとかは関係ないような・・・?) addressというのが「住所」なのか、E-mailアドレスなのかわかりませんが、検索条件に 使うことはあるのでしょうか? 「住所」の意味なら、「都道府県」や「市町村」で検索できるようでなければ使い勝手は よくありませんし、テーブル設計的に見て正規化がじゅうぶんでないように思います。 インデックスについては、下記の質問/回答も参考にしてみてください。  

参考URL:
http://oshiete1.goo.ne.jp/kotaeru.php3?q=458565
653
質問者

補足

返信ありがとうございます。 実際のテーブル構成、SQLは上記とは異なります。 サンプル的な感じで書いたことが誤解を招いてしまいました。 失礼しました。 テーブル構成フィールド数、SQL文の複雑さを省いて質問させてい ただきたいと考えています。 SQL文を発行する際に、作成したインデックスにまつわる情報も 記述するのでしょうか? select f_a, f_b, ・・・ from test_table [use f_a] ←こういった感じで。でもこれは適当に考えました。

関連するQ&A