
A 回答 (4件)
- 最新から表示
- 回答順に表示

No.4
- 回答日時:
主キーにすると複数の列に対して重複がないようにチェックができます。
例えば住所録で「氏名」と「住所」を主キーにして同姓同名や同住所を許容しつつ二重登録をなくすことができます。インデックスではこのようなことはできないと思います。No.3
- 回答日時:
SQL ServerでデフォルトでPKを作るとクラスタインデックスが作成されます。
簡単に言うとクラスタインデックスは物理的にソートされた状態でデータが格納されます。クラスタインデックスはテーブルに1つしか作成されません。
※物理的にソートするのだから当たり前ですが。
物理的にソートされているので、クラスタインデックスは日付などで範囲検索する時などに有効です。
あえて、PKを非クラスタインデックスで作成し、日付の項目にクラスタ索引をつくることもありです。
あと、索引のカラム順も気をつけたほうがよいです。
検索の時に、索引の先頭のカラムを指定しないと索引を使いません。
Aカラム、Bカラムで索引を作っても、Bカラムのみ指定しても索引を使ってくれません。
※Oracleだとスキップスキャンで、先頭でないカラムを指定しても索引を使ってくれる場合もあります。SQL Serverだとどうなのかは調べてませんが、SQL Server2005の経験上おそらく使いません。
検索パターンに合うようにPKのカラム順を考えたほうがよいです。
PKも項目全て指定するなら問題ないです。
一般的に検索パターンを考慮して索引をつけるつけないを判断します。
パフォーマンス上、問題がなければ索引は作りません。
索引があると更新(Update)に時間がかかりますし、索引の分の領域を使うのでデータベースのファイルサイズが大きくなります。
※索引の分もメンテナンスするのだから当たり前ですが。
マネイジメントスタジオでSQLの実行計画を確認すると、索引を使っているかわかります。一度、みてみることをお勧めします。
No.2
- 回答日時:
SQL Serverに限らず、RDBMS全般として回答します。
主キーやuniqueキーを表定義で指定すると、「内部的に重複禁止のインデクスが作成」されます。これは、RDBMS側で重複チェックする上で、重複禁止のインデクスがないと、母体の全件サーチが必要になるからです。
インデクスは、重複チェック以外に、以下の用途でも利用されます。
(create indexで定義する「重複可のインデクス」の場合もです)
(1)検索条件で絞り込む
(2)集合(集計と呼ぶ場合もあり)関数などでデータを見に行かずにインデクス上で値を得る
(3)order by、group by、distinctなどソートを伴う処理で、作業メモリや作業ファイルを用いたソートを発生させない
なお、参照(整合性)制約の外部キーには、自動的にインデクスは作成されないため、「外部キーにインデクスを定義すべき」と説明しているRDBMSが多いです。
chukenkenkou様、回答有難うございます。
特に主キー以外で検索などは必要としない為、
今回はインデックスの設定は行わないことにしました。
詳しく説明ありがとうございます。
No.1
- 回答日時:
主キーというのは、主キー制約という制約の一種です。
だからそれだけでは本来はインデックスとは関係がないのですが、SQL Serverの場合(また他のDBMSでも)、主キー制約をつけると、その列には自動的にユニークインデックスが作成されます。
SQL Server Management Studioで、テーブルの中の「インデックス」の中を見てみると、主キーをつけたテーブルには
自動的に「PK_(テーブル名)」というものができているはずです。
インデックスは索引簿のようなもので、検索効率向上のためにつけるものです。
しかし、ほぼ主キー以外での検索を行わないテーブルであれば、すでにインデックスがついていますので、別途インデックスをつける必要はありません。
もし、テーブルの件数が多く、主キー以外の検索条件で検索することが多いテーブルで、その主キー以外の列を検索条件に指定することで
対象件数の絞り込みの効果が大きい場合、その列に別途インデックスを作成することが多いです。
jamshid6様
詳しい回答有難うございます。
今回は主キーのみの検索の為、主キー以外のインデックスの
設定は行わないようにしました。
次回以降参考にします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- カラオケ 原曲キー設定で歌った事を原曲キーと言ってはいけないんでしょうかね? 5 2023/06/01 23:00
- Oracle SQLについて教えて下さい。 主キーを持ったカラムを主キーの機能を持たせたまま カンマ区切りで文字列 1 2023/03/27 22:47
- カラオケ 原曲キー設定で歌った事を原曲キーと言ってはいけないんでしょうかね? 5 2023/05/01 20:00
- カラオケ 音楽的にオク下やオク上であっても「設定したキー」で歌えば「そのキー」で歌った事になるんでしょうか? 2 2023/08/01 23:00
- 外国株 インデックス投資は、実は罠がある、バンガード社が、ウオール街の ランダムウオーカーとか、宣伝活動した 2 2023/01/06 22:08
- マウス・キーボード 不良表示キー(キーボード) 3 2022/04/27 10:53
- その他(プログラミング・Web制作) ラズパイ上の、pythonのエラーについて 1 2023/04/12 23:27
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- カラオケ 原曲キー設定で歌ったら原曲キーで歌ったと言って良いって事でしょうかね? 1 2023/07/01 23:00
- SEO noindexタグを試作ページの段階で使うとき 1 2023/02/15 08:42
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
インデックスの再構築の意味っ...
-
ビューにインデックスを設定で...
-
主キーにインデックスは貼らな...
-
Oracleでルールベースでの複合索引
-
テキスト項目255ケタのメリット...
-
mysql IN句に1データだけ指定...
-
SQL関数とレスポンスについて
-
MS-DOS時代のデーターベ...
-
outlook2007 検索できないんです
-
[ BETWEEN ] vs [ >= AND <= ]
-
ACCESS2007 フォーム 「バリア...
-
「マスタ」と「テーブル」の違...
-
SELECT文でのデッドロックに対...
-
重複するキーから一番古い年月...
-
オラクルではできるのにSQLSERV...
-
コンボボックスで入力したもの...
-
accessのロック
-
クエリのキャンセルがいつにな...
-
ACCESSでのCSVデータの自動取り...
-
Access VBA [リモートサーバー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
インデックスの再構築の意味っ...
-
mysql IN句に1データだけ指定...
-
主キーにインデックスは貼らな...
-
【SQLServer】IS NULLのパフォ...
-
ビューにインデックスを設定で...
-
コクヨ タイトルブレーンでイ...
-
[ BETWEEN ] vs [ >= AND <= ]
-
年と月が別カラムの場合のSQL
-
ホームページがGOOGLEにインデ...
-
サイトがいつまでたってもGoogl...
-
インデックスがすぐに壊れます…
-
サーバ負荷を抑える大量データ...
-
主キーとインデックスの違いに...
-
『ラミネートインデックスシー...
-
テキスト項目255ケタのメリット...
-
インデックスが無効になっている
-
Google検索はなぜ早い?
-
コマンドプロンプト エラー
-
SQL関数とレスポンスについて
-
Macのパソコンでインデックスに...
おすすめ情報