- ベストアンサー
UNIQUEをつけたときのINDEXテーブル
テーブル作成時、カラムにUNIQUEをつけると自動でインデックステーブルが作成されますが、このインデックステーブルで、通常のselect検索も早くなるのでしょうか? 具体的には、ユニークなカラムidを持つテーブルtableA create table tableA( id INTEGER UNIQUE, some_column INTEGER ); を作ったあとで、そのidにあらためて CREATE INDEX id ON tableA (id); と、インデックスを張る必要があるのでしょうか。 よろしくお願いします。
- みんなの回答 (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を許可しない と扱いが違うので注意してください。
お礼
特に必要ないのですね。 ありがとうございました。