• ベストアンサー

RDBMSの「インデックス」というものについて教えてください。

RDBMSの「インデックス」というものについて教えてください。 私の認識ではインデックスは辞書と同じ索引だと思っています。 例えばあるデータの頭文字をすぐに調べるものでしょうか? そのインデックスがどうなっているかを調べる方法は無いでしょうか? 例えばインデックスの構成を調べるSQLがあるのかどうかがわかりません。 そういったものはありますか? また、インデックスというのはどうやって付けていくものですか? 平易に解説いただけるとうれしいです

  • mr-r00
  • お礼率93% (480/516)
  • Oracle
  • 回答数1
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

Yahoo!知恵袋の質問に対し、詳しく回答しておきましたから、そちらを参照願います。 http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1136490401

mr-r00
質問者

お礼

ありがと

関連するQ&A

  • RDBMSについて

    ものすごく初歩的な質問でしょうので恥ずかしいのですが、RDBMSというのは例えばWindowsであればそのものつまりOSの中に組み込まれているものなのでしょうか?データベースマネージメントシステムというものがアプリケーション等の下にあり(OSの中でしょうか?)それと連携する事でエクセルもワードもアクセスもデータの集計・抽出等が出来るということでしょうか?それがリレーショナルデータベースの考えに基づいて作られているのでRDBMSという略に?最近ではそれに直接的にアクセスできる言語としてSQL(何を略したのかよく分かりませんが)があるということなのでしょうか。

  • RDBとRDBMSの違いは何!?

    RDB(リレーショナルデータベース)とRDBMS(リレーショナルデータベースマネージメントシステム)の違いは何なのでしょうか? RDBは単体ではデータを関連付けて保存することしかできなくて、そこから条件に合ったデータを抽出したり検索したりするのがRDBMSという事なのでしょうか? 今まで同じ意味だと思っていましたが、 (例) (PostgreSQLをインストールするだけで、データを関連付けて保存できて、抽出も検索もできる) この認識は間違っているのでしょうか? 基本的なことで申し訳ございませんが、よろしくお願いいたします。

  • 前方一致で索引(インデックス)が使用されない?

    社員表に対して、SQLを実行します。 (社員名)は任意の文字列です。 select syainNO from syain where deleteflg = '0' and syain_kubun = '2' and syain_mei like '(社員名)%'; 索引は以下の2つです。 // deleteフラグに対する索引・・・(a) create index syain_index_1 on syain ( deleteflg ) // 社員区分と社員名に対する索引・・・(b) create index syain_index_2 on syain ( syain_kubun, syain_mei ) deleteflgは0と1しか存在せず、0がほとんどです。 syain_kubunは1と2のみで、1が9割、2が1割程度です。 このとき、SQL実行時にトレースを分析すると、 (a)が使用され、(b)は使用されていません。 deleteflgとsyain_kubunのデータ分布からすると、deleteflg = '0'の条件により、 明らかに(b)の方が絞り込みを行えると思うのですが、使用されないのはなぜでしょうか? where syain_kubun = '2' and syain_mei like '(社員名%) ' and deleteflg = '0'; のように、条件の順番を入れ替えても効果はありませんでした。 試しにwhere句を変えてみると、(b)の索引が使用されます。 (likeをやめ、=を指定) where deleteflg = '0' and syain_kubun = '2' and syain_mei = '(社員名) '; この2つの違いは何でしょうか? 解決策として、以下を考えています。 (a)の索引は事情があって削除はできません。 (i)deleteflg = '0' を deleteflg != '1' にする  →(a)の索引が有効にならないようにする。   ただし、パフォーマンスに影響がないか (ii)deleteflg = '0' を条件から外す  →SQLを組み立てるjava側で、deleteflgの値によって   データ取得可否を判定するロジックが増えるのでちょっと。 これらの解決策に対するご意見、また、他に案がありましたら よろしくお願いします。

  • インデックス(index)とはなんでしょうか?仕組みを教えてください。

    なんとなくは分かっているのですが、その仕組みが、まだしっくりといってません。 例えば、「zoo」という英単語を辞書で調べる時に、Aから順に総当りでページをめくっていては日が暮れます。その場合、Zに目印をつけておけば、すぐに見つけることができますよね。 インデックスとは、これと似たような仕組みなのでしょうか? もしそうであれば、単語内に、「oo」がある文字を探すにはどうすればよいのでしょうか?総当りで調べていく以外の方法が分かりません。 また、もしインデックスを張ることによって、SELECTの速度が上がるのであれば、なぜ全カラムにインデックスを張らないのでしょうか? インデックスを張るデメリットは何でしょうか?また、インデックスを張るか張らないかの基準は何でしょうか?

    • ベストアンサー
    • MySQL
  • INDEXヒントとは?

    @ITの以下のページで、 LIKEの中間一致、後方一致で検索する場合は索引が使用されない。対処方法には、「INDEXヒントを使用する(索引列にNOT NULL制約が必要)」 と書かれています。http://www.atmarkit.co.jp/fdb/rensai/orasql07/orasql07_1.html INDEXヒントとは一体何のことでしょうか? 現在チューニングを行っておりますので、有効な方法であれば是非利用したいのです。

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

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

  • MySQLのインデックスについて

    MySQLのインデックスについて 以下のSQLにてお聞きしたいことがあります。 SELECT * FROM table1 WHERE num = '1' numはint型でインデックスを作成済の列なのですが、 問い合わせでは'1'のように文字列型で条件指定しています。 この場合、numに対するインデックスは効くでしょうか? よろしくお願い致します。 追伸 なぜこのような質問をさせて頂くかと申しますと、 私は開発環境でZend Frameworkを使用しておりまして、 その中のZend_Dbを使用しているのですが、 名前つきパラメータを使用してSQLを実行した場合に、 実際の実行されているSQLではどのパラメータも、 シングルクォーテーションで囲われているのではと思うんです。 以前、SQL実行に失敗して出力されたエラーメッセージの一部に、 実際に実行されたSQLが記述されていたのですが、 数値型の列もシングルクォーテーションで囲われていたんです。 もしかしたら名前つきパラメータを使用すると、 すべてのパラメータが文字列型扱いされているのではと思い、 こちらに投稿させて頂きました。

    • ベストアンサー
    • MySQL
  • ■検索時にINDEX(インデックス)がどう役立つのか?

    いつもお世話になっております。 MySQLのカテゴリにて質問をさせて頂きますが、このことに意味はありません。 SQLにおける、INDEXの考え方を知ることができれば良いなと思っております。 SQLについては初心者ですので、分かりやすく教えて頂けると助かります。 では、本題へ。 ------------- あるデータテーブルの検索速度を上げる方法として、 INDEXを設定することもその1つに挙げられるかと思いますが、 あるテーブルにおける、ある列(フィールド)に対しINDEXを設定した場合、 検索時、それはどう利用されるのでしょうか、というのが質問です。 例えば、 会員データベース ・会員番号:id ・年齢:age ※その他、複数のフィールドを持つ、とする。 上記の会員データベースにおいて、 CREATE INDEX idx ON tbl_member(id); という風に、tbl_memberテーブルに対し、 会員番号(id)をINDEXに設定したとします、 idは唯一無二の(ユニークな)データです。 この会員テーブルにおいて、 年齢(age)フィールドをもとに、40歳以上の会員を抽出(検索)したい場合、 INDEX(idが設定されている)はこの検索において、 どういう仕組みで活かされることになるのでしょうか? ageと無関係のidが、どう役に立つのか分からずにいる、ということです。 ネット上で色々調べたのですが、 あるフィールドをINDEXに設定した場合に、 それが検索時にどう活かされるのかについて説明されているページを 私は見つけることができませんでしたので、質問させて頂きました。 どうぞ、宜しくお願い致します。

    • ベストアンサー
    • MySQL
  • INDEXの仕様

    PostgreSQL8.1.1(RedHatLinux)にて テーブルのtext列に対してindexを作成しました。 作成した列に対して、LIKE検索を行っております。 しかし、「EXPLAIN」を利用してSQLの実行計画を見たんですが、 「Seq Scan」からしか始まらず、 「Index Scan」という文字が見当たりません。 PostgreSQLにてindexを張った列に対するLIKE検索では、 indexは使用されないのでしょうか?

  • インデックスを調べる方法は?

    お世話になっております。 SQL Server2000で任意のテーブルのインデックスを調べたいのですが、 どうやったら良いのでしょうか? EXEC sp_indexes を実行すると、 サーバー '○○' は DATA ACCESS 用に設定されていません。 というエラーになります。