• ベストアンサー

CREATE INDEXはどういう時に使うのがいいのでしょうか?

CREATE INDEX は使い方によっては早くも遅くもなると書いてあったのですが、一般的にはCREATE INDEXはどういう時に使うのでしょうか?

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

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

テーブル設計を経験すると分かると思いますが、プライマリキー以外で条件検索、結合、ソートやグループ化という検索が必要になることが少なくありません。 そういう場合に、CREATE INDEXでプライマリキー以外のインデクスを定義します。 また、プライマリキー以外で重複を禁止したいカラムがある場合も、CREATE INDEXでUNIQUEを指定して制約を設けます。 インデクスを無闇に定義すると、更新等でオーバヘッドになります。また、母体データ件数、データ値の種類(個数)なども、インデクスを付けるべきか否かを判断する上で考慮する必要があります。

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

関連するQ&A

  • CREATE TABLEのUSING INDEXについて

    題名通りなのですが、実際に CREATE TABLE テーブル名 (各種列作成, 制約) USING INDEX ~ USING INDEX以降に列と関係のないものをごちゃごちゃと置いていて 何をやっているかがいまいちよく分かりません。 色々とサイトなど調べたのですがいまいちよく分かりませんでした。 分かる方いらっしゃいましたら、教えていただけると幸いです。 どうかご教授よろしくお願い致します。

  • 効率的なインデックスのつけ方は?

    効率的なインデックスのつけ方は? MYSQLでのインデックスのつけ方をご教授して頂けますでしょうか? ・データ数とかその他もろもろにもよるかと思いますが、一般的に考えてってことでよろしくお願いいたします。 以下のようなテーブル定義があったとします。 CREATE TABLE TEST_TBL ( C1 VARCHAR(10) NOT NULL, C2 VARCHAR(10) NOT NULL, C3 VARCHAR(10) NOT NULL, C4 VARCHAR(10) NOT NULL, PRIMARY KEY (C1) ) 検索条件としては、 ・(C1) ・(C2) ・(C3) ・(C4) ・(C1,C2) ・(C1,C3) ・(C1,C4) ・(C2,C3) ・(C2,C4) ・(C3,C4) ・(C1,C2,C3) ・(C1,C2,C4) ・(C1,C3,C4) ・(C2,C3,C4) ・(C1,C2,C3,C4) と言うような、すべての場合の条件があるとします。 それぞれの検索条件の頻度は同程度とします。 この場合、どのINDEXとどのINDEXを作成するがベターなのでしょうか? 1. CREATE INDEX TEST_IDX1 ON TEST_TBL (C1); 2. CREATE INDEX TEST_IDX1 ON TEST_TBL (C2); 3. CREATE INDEX TEST_IDX1 ON TEST_TBL (C3); 4. CREATE INDEX TEST_IDX1 ON TEST_TBL (C4); 5. CREATE INDEX TEST_IDX1 ON TEST_TBL (C1,C2); 6. CREATE INDEX TEST_IDX1 ON TEST_TBL (C1,C3); 7. CREATE INDEX TEST_IDX1 ON TEST_TBL (C1,C4); 8. CREATE INDEX TEST_IDX1 ON TEST_TBL (C2,C3); 9. CREATE INDEX TEST_IDX1 ON TEST_TBL (C2,C4); 10.CREATE INDEX TEST_IDX1 ON TEST_TBL (C3,C4); 11.CREATE INDEX TEST_IDX1 ON TEST_TBL (C1,C2,C3); 12.CREATE INDEX TEST_IDX1 ON TEST_TBL (C1,C2,C4); 13.CREATE INDEX TEST_IDX1 ON TEST_TBL (C1,C3,C4); 14.CREATE INDEX TEST_IDX1 ON TEST_TBL (C2,C3,C4); 15.CREATE INDEX TEST_IDX1 ON TEST_TBL (C1,C2,C3,C4);

    • ベストアンサー
    • MySQL
  • MySQLのUNIQUE INDEXとINDEX

    MySQLのUNIQUE INDEXとINDEXの使い分けで質問があります。 UNIQUE INDEXは、社員番号や学籍番号など重複がないものに対して使われ、 INDEXは名前のように重複が想定されるものに対して使われるのでしょうか? また、複数のカラムに同一のインデックスをつける場合、 CREATE INDEX idx_名前 ON 社員(氏,名) と言う感じになりますが 例えばこんなコード CREATE INDEX idx_名前 ON 社員(氏) and CREATE INDEX idx_名前 ON 社員(名) これはエラーになるんでしょうか?

    • ベストアンサー
    • MySQL
  • create tablespace 時の内容確認

    Create Tablespaceを行った時の内容を知りたいと思います。 select DBMS_METADATA.GET_DDL('TABLESPACE','名称') from dual とした所、 ORA-31600:入力値TABLESPACE(パラメータOBJECT_TYPE、ファンクションGET_DDL)が無効です。 と出ます。 TABLEやINDEXはこの方法で見れましたが、 TABLESPACEはこの方法ではダメでしょうか? Create Tablespaceを行った時の内容を知る方法はあるのでしょうか? (ちなみにCreate USER を行った時の内容を知る方法もあるのでしょうか?)

  • ■検索時に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
  • UNIQUEをつけたときのINDEXテーブル

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

  • テーブル、インデックスのCREATE文について

    ObjectBrowserを使用すると標記のソースが参照できますが、これをデータディクショナリから拾おうとするとどのようなSQLでできるのでしょうか? マニュアル等いろいろ調べましたところ、各情報を項目として捕まえることはできそうなのですが、CREATE文として取得する方法は探し当てれませんでした。 どなたかご存知の方、よろしくお願いします。

  • PRIMARYKEYとINDEX

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

  • create user時のquotaの確認

    create user時にパラメータでquotaの設定ができると思いますが 既に存在するuserで、create user時にquotaを どのように設定したかを確認する事はできるのでしょうか?

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

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

    • ベストアンサー
    • MySQL