いつもお世話になっております。
今データベースを勉強しようとおもい
いろいろ本を読んで勉強しているのですが
どうしてもわからないことがあります。
テーブルの作成時にindexやkeyの指定の仕方は
掲載されているのですが、どんなレコードに付けるのか?
また、指定した結果どのような恩恵を受けるのかが
いまいちわかりません。
postgresqlの本を2冊ほど読み
PHPからデータを出し入れしてるレベルですが
インターネットで検索しても、検索の仕方が悪いのか
指定方法は出てくるのですが、どうして指定するのか間では見つけられません。
もしかして、データベースをやる方ならば当たり前に知っていることなのか?
というような、超初心者な質問で申し訳ありませんが、
どなたか、ご教授お願いいたします。
もやもやして、わからないことがあると勉強もなかなか先に進めません。
よろしくお願いいたします。
No.1ベストアンサー
- 回答日時:
はじめまして。
うぅ~む。改めて考えると「なんで」って思ってしまった^^;。
インデクスを指定したことの最大の恩恵は『検索速度の向上』だと思います。
件数が少ないDBだとその差はわからないと思いますが、数百万件のデータの検索となった場合、インデクスの有無で検索速度は大変違ってきます。これに、GROUP BYやJOINすると大変な違いとなります。
第2の恩恵は『DB正規化の容易』でしょうか?
プライマリーキーを指定することで、コードなど重複不可なデータを誤ってDBに追加できないようにできます。PGレベルで考慮することが少なくなります。
しかし、インデクスをすべての列に指定すると、更新・追加などでインデクスメンテを行うため、効率が悪くなってしまいます。必要な列にのみ指定したほうがよいと思います。
SQL文を主に取り扱った書籍よりリレーショナルデータベース関連の本を探してみると、記述があると思います。
少々はお役に立てたでしょうか?
早速のご回答ありがとうございます。
検索速度の向上とDB正規化の容易ですか
テストで作るような小さなデータベースにはあまり必要無いということですね。
今日の帰りに早速リレーショナルデータベース関連の本を探してこようと思います。
ありがとうございました。
No.2
- 回答日時:
indexをつけるのは検索速度の関係ですよね.indexを日本語に直すと,索引ですので,索引がある本から目的のページを探すのは簡単ですが,索引がない本から自分が探しているページを探すには最初から読むしかないですよね.ということで,indexを使うと検索の速度が上がります.primaryを指定した場合は勝手にindexが作成されるのは検索速度を上げるためです.
ただ,更新処理が多い場合はindexをつけることはあまりしません.理由は索引を作り直す必要があるためです.insertやupdateが発生するたびにDBはindexを作り直しています.そのため検索処理が多いようなページをPHPで作成する場合は,検索キーにindexをつけます.updateやinsertが多いページを作る場合はそのDBにindexをつけると逆に遅くなります.
ご回答ありがとうございます。
大変参考になります。
検索を早く処理したいか更新を早く処理したいかを考え
どちらの処理が多いのかを考えていくとうまくいくのかな?
実は今まで(趣味で)作成したアプリケーションは、すべてテキストベースでデータを管理していたのですが、この度(会社で)業務用のアプリケーションを作成することになり、あわててデータベースの勉強を始めた次第です。
この様な基本的なことを知っていないと、今後の変更や私以外の者が管理することになったとき迷惑をかけないようにと思い、質問させていただきました。
丁寧な説明、ありがとうございます。
No.3
- 回答日時:
Indexをつけるのは、基本的には検索の速度をあげるためですが、その他に、Indexを付けた列の一意性の保証、表の結合時のロックや結合の効率化などの効果があります。
いずれにしても、IndexとKeyの組み合わせによって実現されます。(ただし、この辺りの実現はデータベースによって違いますので、PostgreSQLで実装されているかは私は知りません。)
あとKeyの方ですが、こちらは、データの管理を楽にするための物です。
例えば、プライマリキーは、その列の一意性の保証と、表結合の際の結合の効率化、外部キーは、参照整合性制約の実現と表結合の効率化などの恩恵が期待できます。
回答ありがとうございます。
大変詳しいアドバイス参考になります。
表結合等はまだ試したことは無いのですが、違うテーブルのデータを結合するのは、スクリプト上でやってしまおうかな、と考えていました。データベースも大変奥が深いですね。
また、質問させていただくこともあるかと思いますが
お手すきであれば、また助けてください。
いつか自分も助けてあげられる人になりたく、日々励んでおります。
本当にありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
データベースファイル(.db)を開...
-
エクセルのフィルタ抽出が固まる
-
ACCESSのSQLで、NULLかNULLでな...
-
CSVファイルでテキストの改行の...
-
警察はスマホに保存した動画や...
-
「1004:アプリケーション定義...
-
Accessを開きなおすとテキスト...
-
テキストボックスにコントロー...
-
最新の日付とその金額をクエリ...
-
20万行あるデータを動かしたい
-
googleフォームでインストール...
-
構文エラー:演算子がありませ...
-
FROM句の構文エラー ACCESS SQL
-
式を簡単にしてください。ACCES...
-
AccessのSQLで、FROM句の構文エ...
-
更新クエリをリンクデータベー...
-
Access クエリ上で表示させた割...
-
Access フォーム上でコンボボッ...
-
帳票フォームでのあるコンボボ...
-
Accessのリレーション解除した...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
データベースファイル(.db)を開...
-
エクセルのフィルタ抽出が固まる
-
ACCESSのSQLで、NULLかNULLでな...
-
警察はスマホに保存した動画や...
-
レコード数のカウント
-
Accessを開きなおすとテキスト...
-
CSVファイルでテキストの改行の...
-
マイクロソフトAccessでsqlのas...
-
最新の日付とその金額をクエリ...
-
情報整理するのに、「 Fullfree...
-
構文エラー:演算子がありませ...
-
Excelフィルタ抽出で「検索して...
-
googleフォームでインストール...
-
DocuWorksでの印刷
-
AccessのSQLで、FROM句の構文エ...
-
シートが異なるセル同士を、相...
-
テキストボックスにコントロー...
-
更新クエリをリンクデータベー...
-
Accessのリンクテーブルについて
-
FROM句の構文エラー ACCESS SQL
おすすめ情報