
テーブル作成時、カラムにUNIQUEをつけると自動でインデックステーブルが作成されますが、このインデックステーブルで、通常のselect検索も早くなるのでしょうか?
具体的には、ユニークなカラムidを持つテーブルtableA
create table tableA( id INTEGER UNIQUE, some_column INTEGER );
を作ったあとで、そのidにあらためて
CREATE INDEX id ON tableA (id);
と、インデックスを張る必要があるのでしょうか。
よろしくお願いします。
No.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を許可しない
と扱いが違うので注意してください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
postgreSQLのint型は桁数指定が...
-
テーブルからのselectにおいて...
-
こんばんは。
-
truncate文で全テーブルを一気...
-
データを削除しても表領域の使...
-
Data Pump で大量データインポ...
-
ORA-00959: 表領域'****'は...
-
INDEXの無効化
-
Viewにインデックスは張れ...
-
oracleのimpdpでORA-39166
-
db2にて数値を3桁文字にて出力...
-
カラムの存在チェック
-
datapumpの実行方法について
-
CLOB型へのINSERT
-
DELETE文でFROM句を省略した場合
-
ACCESS テーブルに2行目から取...
-
インデックス作成後アナライズ...
-
異なるスキーマからデータを抽...
-
アナライズとインデックス作成...
-
複数テーブルをひとつのテーブ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
postgreSQLのint型は桁数指定が...
-
テーブルからのselectにおいて...
-
PostgressからMySQL(MariaDB)...
-
ビット演算結果の取得
-
UNIQUEをつけたときのINDEXテー...
-
plpgsqlのエスケープ文字について
-
PostgresSQL8.4でツリー上に取...
-
SQL SELECT文 別テーブルのレコ...
-
クエリアナライザのsp_helpコマ...
-
pg_queryで変数の取り扱い方
-
テーブル作成 外部参照 配列
-
indexを使おうとしない間違った...
-
ベスト3の抽出方法
-
賢いSQL文がわからない
-
チェックボックスから、データ...
-
phpPgAdminからSQL文を発行し、...
-
SQLで検索結果の記事を表示したい
-
データを削除しても表領域の使...
-
Viewにインデックスは張れ...
-
ORA-00959: 表領域'****'は...
おすすめ情報