dポイントプレゼントキャンペーン実施中!

テーブル作成時、カラムにUNIQUEをつけると自動でインデックステーブルが作成されますが、このインデックステーブルで、通常のselect検索も早くなるのでしょうか?

具体的には、ユニークなカラムidを持つテーブルtableA

create table tableA( id INTEGER UNIQUE, some_column INTEGER );

を作ったあとで、そのidにあらためて

CREATE INDEX id ON tableA (id);

と、インデックスを張る必要があるのでしょうか。

よろしくお願いします。

A 回答 (1件)

SQLの規格としてはUNIQUE制約を指定した時にINDEXを作成するかどうかは決められていませんが(SQL規格にはINDEXの記述がない)、私が知るかぎりはPRIMARY KEY制約、UNIQUE制約を指定した場合はすべてのRDMSでINDEXが暗黙に作成されます。


PostgreSQLも同様です。
ですから、
CREATE INDEX id ON tableA (id);
とする必要はありません。PostgreSQLではエラーになりませんが、Oracleなどでは既に索引が作成されている列に同一の内容で索引を作成しようとするとエラーになります。
暗黙に作成されたINDEXも暗黙に作成されたINDEXも同様に使用されますので速度の向上が見込めます。
後、UNIQUE制約ですが
Oracle→NULLは複数個許可する。暗黙作成される索引にNULLを含めない。
PostgreSQL,MySQL→NULLは複数個許可する。暗黙作成される索引にNULLを含む。
SqlSERVER→NULLは1個のみ許可する。
DB2→NULLを許可しない
と扱いが違うので注意してください。
    • good
    • 0
この回答へのお礼

特に必要ないのですね。
ありがとうございました。

お礼日時:2011/10/16 20:50

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

関連するカテゴリからQ&Aを探す