重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

おはようございます。

SQLServerのテーブルに格納された情報が多いので
インデックスを用いて検索処理を早めたいと考えました。


---テーブル構成--------------
name / varchar
address / varchar
age / int
----------------------------
name,addressフィールドにインデックスを指定したのですが、
インデックスを指定することにより検索するSQL文に
なにか特別な書き方をしなくてはいけないのでしょうか?

select name, address, age from test_table;
ってSQLを記述しただけでは、
インデックスを作成する前と後では意味はないのでしょうか?
宜しくお願い致します。m(_ _)m

A 回答 (3件)

こんにちわ。



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

こんにちわ。



そうですね。
nanashinogombei さんもおっしゃられていますが、検索条件を指定
しないとインデックスを定義していてもRDBMS としてはインデックスを
使用しません。
一般的に、インデックスの有無はRDBMS が透過的に処理を行ってくれますので、
インデックスを定義すれば、RDBMS が使用可能なインデックスを使って
検索を行ってくれます。
但し、今回のように検索条件が指定されていない場合は、いくらインデックス
を定義しても意味がありません。

一般的に、インデックスは大量のデータの中から少量のデータを検索する
際に有効となります。
指定した検索条件が、レコードの大部分に合致するような場合では
逆にインデックスを使用しない方が高速に検索が行える事もあります。
    • good
    • 0
この回答へのお礼

返信ありがとうございます。

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

お礼日時:2003/02/17 13:16

 


まず、インデックスの設定が妥当で合理的なものなのか検討が必要です。
一般的には検索時のWHERE条件で使用される列で、かつ絞込みの大きい項目に
設定します。

select name, address, age from test_table;

↑コレだと全件抽出ですよね?(^^;
(インデックスがどうこうとかは関係ないような・・・?)
addressというのが「住所」なのか、E-mailアドレスなのかわかりませんが、検索条件に
使うことはあるのでしょうか?
「住所」の意味なら、「都道府県」や「市町村」で検索できるようでなければ使い勝手は
よくありませんし、テーブル設計的に見て正規化がじゅうぶんでないように思います。

インデックスについては、下記の質問/回答も参考にしてみてください。
 

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

この回答への補足

返信ありがとうございます。
実際のテーブル構成、SQLは上記とは異なります。
サンプル的な感じで書いたことが誤解を招いてしまいました。
失礼しました。
テーブル構成フィールド数、SQL文の複雑さを省いて質問させてい
ただきたいと考えています。

SQL文を発行する際に、作成したインデックスにまつわる情報も
記述するのでしょうか?

select f_a, f_b, ・・・ from test_table
[use f_a] ←こういった感じで。でもこれは適当に考えました。

補足日時:2003/02/17 13:09
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!