[解決済み] SQL:プライマリキーとインデックスは一体何をするのですか?
質問
最近、SQLデータベースを使用する初めての本格的なアプリケーションを開発し始め、phpMyAdminを使ってテーブルをセットアップしているところです。様々なカラムにいくつかのオプション機能(quot;features")を与えることができますが、それらが何をするものなのかがよくわかりません。
- 主キー
- インデックス
PKが何のためにあり、どのように使うかは知っていますが、それに関する私の質問は、なぜPKが必要なのか、つまり、PKを1つしか持てないという事実以外に、単に列を"Unique"に設定するのとどう違うのかということです。この値がレコードを一意に識別することをプログラマに知らせるためだけなのでしょうか。それとも、何か特別なプロパティがあるのでしょうか?
実際、私がこの言葉を使ったのを見たのは、(1)私の主キーがインデックスされているように見えること、(2)インデックス付けはパフォーマンスと何らかの関係があり、インデックス付きのカラムが必要だが、多すぎてもいけないと聞いたこと、だけです。インデックスを付けるカラムはどのように決めればいいのでしょうか?
を編集してください。 ORDER BYしたい列のインデックスを作成する必要がありますか?
ありがとうございました。
マーラ
解決方法は?
プライマリキーは通常、レコードに数値の「id」を作成するために使用され、このid列は自動的にインクリメントされます。
例えば
books
テーブルで
id
フィールドがあり、ここで
id
は主キーであり、また
auto_increment
(phpmyadminの'Extra'の下)、最初にテーブルに本を追加したとき、その本のidは1'になります。次の本の ID は自動的に '2' になり、以下同様です。通常、すべてのテーブルには少なくとも1つの主キーがあり、レコードの識別と検索を容易にする必要があります。
インデックスは、あるテーブルから特定の情報を定期的に取り出す必要がある場合に使用します。たとえば
users
テーブルにアクセスする必要があります。
email
カラムにインデックスを追加すれば、Eメールにアクセスするクエリーが高速になります。
ただし、不要なインデックスを追加することにはデメリットもあるので、本当にアクセスする必要のあるカラムだけに追加しましょう。例えば
UPDATE
,
DELETE
と
INSERT
クエリの実行速度は、インデックスが多いほど若干遅くなります。詳細は以下を参照してください。
このページ
.
編集: はい、必要なカラムは
ORDER BY
で使用されるものと同様に、インデックスを持つべきです。
WHERE
.
関連
-
[解決済み】 "指定された集約関数を含まないクエリを実行しようとしました。"
-
[解決済み] FROM のサブクエリにはエイリアスが必要です。
-
[解決済み] UNIONとUNION ALLの違いは何ですか?
-
[解決済み] SQL Serverで、指定したテーブルを参照しているすべての外部キーを一覧表示するにはどうすればよいですか?
-
[解決済み] SQLite - UPSERT *not* INSERT or REPLACE
-
[解決済み] phpMyAdminで外部キーを設定する?
-
[解決済み】「INNER JOIN」と「OUTER JOIN」の違いは何ですか?
-
[解決済み】インデックスのカラムの順番はどのくらい重要ですか?
-
[解決済み】Postgresと外部キーおよびプライマリキー上のインデックス
-
[解決済み] SQL - 多対多のテーブルの主キー
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】CREATE VIEW は、バッチ内の唯一のステートメントでなければなりません。
-
[解決済み] テーブルのFROM句の項目がない [終了しました] 。
-
[解決済み】ストアドプロシージャーのエラー ORA-06550
-
[解決済み】BULK INSERTで「予期せぬファイルの終了」エラーが発生したROWを特定する?
-
[解決済み】sys.dm_exec_sql_textはどのように機能するのでしょうか?
-
[解決済み] エラー: 名前解析スクリプトで正しい関数に渡された長さのパラメーターが無効です。
-
[解決済み] ORA-01779: キーが保存されていないテーブルにマップされる列を変更できません。
-
[解決済み] ORA-00920: 無効な関係演算子
-
[解決済み] 列名または提供された値の数がテーブル定義と一致しません。
-
[解決済み] ORA-00997: LONG データタイプの不正使用に対する回避策