質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

3回答

6637閲覧

PKとUNIQUE INDEXの併用は意味があるのか

motisen

総合スコア92

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

2クリップ

投稿2018/05/06 22:32

編集2018/05/07 01:05

お世話になります。

現在携わっているシステムのとあるテーブルにおいて、Primary Key と Unique Index が両方効いているカラムがありました。

これは、意味があるのでしょうか。Primary Key だけでよいという認識です。
Unique Index を付けておく理由などあればご教示していただけたいです。
(設計した人はもういません・・・)

また、必要なければUnique Indexの方は消したほうがよろしいでしょうか。

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

それぞれのインデックスの項目について、(対象項目、項目の順序、昇順/降順)
が全て同じならuniqueインデックスの方は不要だと思います。

但し、主だったSQLの実行計画は影響がない事を確認した方が良いかもしれません。

Primary KeyとUnique Indexそれぞれを持つ場合の典型的な例は、Primary Keyをサロゲートキーとした場合です。
この場合、ナチュラルキーをUnique Indexとします。

その他にも、複数のキー体系を持つ場合などにも併用したりします。

投稿2018/05/07 00:47

編集2018/05/07 00:53
sazi

総合スコア25195

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

motisen

2018/05/07 01:09

申し訳ありません。 質問文がまちがっておりました。 PKとUnique Indexが付いているのはテーブルではなく、カラム(同じカラム)になります。 サロゲートキーにPKとUnique Indexが貼られていました。
sazi

2018/05/07 02:27 編集

インデックスはテーブルに対して付与するものですから、表現は間違っていませんよ。 異なるインデックス名で全く同じ内容ということなら、ユニークインデックスの方は不要ですね。 削除すると、容量が圧縮されることと追加時の性能も理論上は向上します。 保証はしませんが、過去の経験上、削除しても既存のSQLに対して性能的に影響は出ていません。
motisen

2018/05/07 14:11

ご回答ありがとうございます。やはりユニークインデックスの方は不要ですよね。
guest

0

同じカラムの並びでしたらPRIMARY KEYとNOT NULL制約の付いたUNIQUE KEYは同じ機能ですから、DB ServerにはPRIMARY KEYと同じカラムのUNIQUE KEYを付けるだけ無駄に負荷がかかります。

Oracle案件でしたがSELECT文のFROM句にテーブルかビューを1つしか書いてはならない、って掟のSIerではPRIMARY KEYと同じ列の並びでUNIQUE KEYを設定するのも掟でした。そのSIerはサーバーも売っているので、お客様にはより高価なサーバーを買っていただくための戦略のようです。

投稿2018/05/07 10:58

Orlofsky

総合スコア16415

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

motisen

2018/05/07 14:12

ご回答ありがとうございます。そんなSierもいるんですね・・・!ユニークインデックスの方は削除したいと思います。ありがとうございます。
guest

0

本来主キーはレコードを識別するためだけに使用するものなので
検索に利用される前提のユニーク属性とはつかいわけるものです。
よほどの理由がない限り併用する意味がありません。

投稿2018/05/07 02:03

yambejp

総合スコア114839

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

motisen

2018/05/07 14:11

ご回答ありがとうございます。ユニークインデックスの方は削除したいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問