• ベストアンサー

PRIMARYKEYとINDEX

ORACLEの表定義でPRIMARYKEYに設定した項目は 自動的にINDEXが作成されるのでしょうか? あるいは明示的にCREATE INDEX~しないと 作成されないのでしょうか? 初歩的な質問かもしれませんが, 宜しくお願いします。

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

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

こんにちは。 索引が・・・という意味では、自動的に作成されます。 つまり、その表に対してのリクエストに、Primaryで検索をしますので・・・。 これは、複数のPrimaryを設定していても同様です。 ただしレスポンスに問題がある場合は、明示的にINDEXを構築して使用する(SQLにて明示的に指定)方法もあります。 例えば、A.B.C.D.E.F.GでPrimaryの場合に、Eのみでの問い合わせが多いとか・・・。 (^^ゞ

tatsurou
質問者

お礼

taka451213 様 早速回答頂きまして,ありがとうございます。 わかりやすい回答でよく理解できました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • PRIMARYKEYとINDEX その2

    あるテーブルのPRIMARYKEYとして, A,B,Cの3項目この順で指定しました。 ところがこのテーブルをA単独で検索することが あります。 この場合,A単独でINDEXを作成したほうが良いでしょうか? それともPRIMARYKEYで作成したINDEX(A,B,C)で事足りるでしょうか? また初歩的な質問になるかと思いますが, 宜しくお願いします。

  • インデックスについて

    オラクルのインデックスについて教えてください。 ObjectBrowserというソフトでオラクルDBを管理しているのですが、 インデックスとCONSTRAINTというものの違いが良くわかりません。 現在ObjectBrowserで、インデックスを重複不可にすることで、そのテーブルの 主キーとしています。しかし、CONSTRAINTでPRIMARYKEYも設定できることに 最近気づきました。 ObjectBrowserに限らず、この違いについて教えてもらえないでしょうか? どのような時にインデックスを使い、CONSTRAINTのPRIMARYKEYはこのような時に 使用するという風にお教えていただければ幸いです。 何分、データベース初心者なもので... 宜しくお願い致します。

  • ユニークインデックスについて

    仕事の関係で、テーブル定義の際にユニークインデックスをどの列の組み合わせにするのか考える必要があるのですが、今までユニークインデックスの存在自体知らず、困っています。 自分自身でネット等で調べた結果以下のことは理解できました。  1.ユニークインデックスで指定された列は値が一意でなければならない。  2.主キーの列にはNULL値は不可だが、ユニークインデックスの列はNULL値も可。  3.主キーは一つのテーブルにつき、一つしか設定できないが、    ユニークインデックスは複数設定できる。(同じ列は指定できない)  4.主キー設定時、実は暗黙的にユニークインデックスとNOT NULL制約が作成されている。 ここまでは分かったのですが、主キーとは別で、明示的にユニークインデックスを指定する必要性とはなんなのでしょうか? 主キーとは別で明示的に指定した方が良い場合と、その実例をどなたか教えて頂けないでしょうか? よろしくお願いします。

  • SQLServerのプライマリキーとインデックスについて

    こんにちわ。 Oracleではあるカラムをプライマリキーとして設定すると, 自動的にそのカラムにインデックスが付与されたと思います。 ところで, SQLServerではあるカラムをプライマリキーとして設定すると, 自動的にそのカラムにインデックスが付与されるのでしょうか? あるいはプライマリキーとインデックスを個別に設定しなければ ならないのでしょうか? 教えてください。よろしくお願いします。

  • テーブル定義書作成時のIndex付加について

    基礎的なことで申し訳ございませんが、 お力添えよろしくお願いいたします。 CentOs 5 & PostgreSQL 8.4.9にてDB構築しております。 DB構築から、テーブル作成・項目追加・キー設定まで行いまして、 検索する際に、抽出件数が多く負荷のかかりそうなものに Indexを作成しようと考えております。 ■本題  1.Indexを作成する対象となる項目の、目安としてどのようなものが考えられるでしょうか。   ・キー対象の項目になっているもの   ・検索条件の対象となる項目なども当たるでしょうか  2.項目をまとめて一つのIndexにするメリット・デメリットはどのようなものでしょうか   3.テーブル結合したときのIndexの動作    例) 下記のようなテーブルがあった場合 tablea(データ50000件程度) hoge_id pkey1 hoge_no hoge_nm ... tableb(データ150000件程度) test_id pkey1 hoge_id pkey2 hoge_betu_kb ...     select t1.hoge_id, t1.hoge_nm, t2.hoge_betu_kb rom tablea as t1 leftjoin tableb as t2 on t1.hoge_id = t2.hoge_id where t1.hoge_id > '100' and t1.hoge_nm like 'あいう%'   このような場合のIndex作成は、 A. Create index idx_tablea_hoge_id ON tablea (hoge_id); B. Create index idx_tablea_hoge_id ON tablea (hoge_nm); C. Create index idx_tableb_hoge_id ON tableb (hoge_id); ←tableaで指定しているのでこれは不要?  4.A.B.C.のようなIndex作成した際のテーブル定義の書き方   テーブル定義書のフォーマットは定められており、お門違いな質問かとは存じてはおりますが、   テーブル定義にIndex定義を書く場合に、添付した画像のようなフォーマットの書き方が   よく理解できずお気づきの点などございましたら、ご指摘願えたら助かります。   (以前は、CSEツールなどで自動出力される定義書のような書き方をしていたもので・・・)         例)tablea IDX1 IDX2 IDX3 hoge_id 1 hoge_nm 2 このような書き方になるのかどうか?      IDX2, IDX3の項目とは?どのようなIndex定義をした際に書き込むことになるのかが判らず。。。      基礎から勉強しなおすべきとは存じておりますが。。。 現状の期間あまり時間がないことと、 DB構築を一人で行っており、このような内容を相談できるものがおりませんゆえ、 改めて、Index付加することを考えてみると、いまさら聞けないような内容かもしれませんが ちゃんと把握したうえで、テーブル構築したいと思いますので 今までの他の皆様の経験からのノウハウなども踏まえて、 ご教授いただけると大変助かります。

  • インデックス作成について

    create index でインデックスを作成したところ Query OK, 7123 rows affected (0.07 sec) records:7123 Dupulicates:0 Warning:0 と表示されました。 しかしながら、indexを張ったカラムのデータは毎日200~500程度増え続けています。 今後、その増加分はindexされないままなのでしょうか? それとも自動的に増加分もindexされるのでしょうか?

    • ベストアンサー
    • MySQL
  • インデックスについて

    インデックスの有無は検索速度に大きな影響を与えると思いますが、どのような項目にインデックスを定義すると、効果が高いですか? また、同一テーブルに複数のインデックスが定義されていた場合に、使用するインデックスがどのようにして選択されるのでしょうか? 簡単な説明でけっこうですのでお願いします。

  • UNIQUEをつけたときのINDEXテーブル

    テーブル作成時、カラムにUNIQUEをつけると自動でインデックステーブルが作成されますが、このインデックステーブルで、通常のselect検索も早くなるのでしょうか? 具体的には、ユニークなカラムidを持つテーブルtableA create table tableA( id INTEGER UNIQUE, some_column INTEGER ); を作ったあとで、そのidにあらためて CREATE INDEX id ON tableA (id); と、インデックスを張る必要があるのでしょうか。 よろしくお願いします。

  • インデックスのまとめ貼りと個別貼り

    いつもお世話になっております。 インデックスを貼るときに主キーのようにまとめて 設定することができますよね。 CREATE INDEX Idx原価 ON T原価 (商品名,発注番号); 上記のようにまとめて設定するのと CREATE INDEX Idx原価_商品名 ON T原価 (商品名); CREATE INDEX Idx原価_発注番号 ON T原価 (発注番号); このように2つに分けて貼るのでは意味は違ってくるのでしょうか? 商品名と発注番号の検索が別々に行われる場合は 分けて作成したら良いのでしょうか?

  • SQLSERVERでも表領域は作れますか?

    ORACLEでいうCREATE TABLE SPACE のようなものはないでしょうか? 1.CREATE TABLE SPACEを知りたいです 2.CREATE TABLE文で、デタレコードにはどの表領域を使って、インデックスにはどの表領域を使うか?を指定する構文を知りたいです。