基礎的なことで申し訳ございませんが、
お力添えよろしくお願いいたします。
CentOs 5 & PostgreSQL 8.4.9にてDB構築しております。
DB構築から、テーブル作成・項目追加・キー設定まで行いまして、
検索する際に、抽出件数が多く負荷のかかりそうなものに
Indexを作成しようと考えております。
■本題
1.Indexを作成する対象となる項目の、目安としてどのようなものが考えられるでしょうか。
・キー対象の項目になっているもの
・検索条件の対象となる項目なども当たるでしょうか
2.項目をまとめて一つのIndexにするメリット・デメリットはどのようなものでしょうか
3.テーブル結合したときのIndexの動作
例) 下記のようなテーブルがあった場合
tablea(データ50000件程度)
hoge_id pkey1
hoge_no
hoge_nm
...
tableb(データ150000件程度)
test_id pkey1
hoge_id pkey2
hoge_betu_kb
...
select t1.hoge_id,
t1.hoge_nm,
t2.hoge_betu_kb
rom tablea as t1
leftjoin tableb as t2
on t1.hoge_id = t2.hoge_id
where t1.hoge_id > '100'
and t1.hoge_nm like 'あいう%'
このような場合のIndex作成は、
A. Create index idx_tablea_hoge_id ON tablea (hoge_id);
B. Create index idx_tablea_hoge_id ON tablea (hoge_nm);
C. Create index idx_tableb_hoge_id ON tableb (hoge_id); ←tableaで指定しているのでこれは不要?
4.A.B.C.のようなIndex作成した際のテーブル定義の書き方
テーブル定義書のフォーマットは定められており、お門違いな質問かとは存じてはおりますが、
テーブル定義にIndex定義を書く場合に、添付した画像のようなフォーマットの書き方が
よく理解できずお気づきの点などございましたら、ご指摘願えたら助かります。
(以前は、CSEツールなどで自動出力される定義書のような書き方をしていたもので・・・)
例)tablea
IDX1 IDX2 IDX3
hoge_id 1
hoge_nm 2
このような書き方になるのかどうか?
IDX2, IDX3の項目とは?どのようなIndex定義をした際に書き込むことになるのかが判らず。。。
基礎から勉強しなおすべきとは存じておりますが。。。
現状の期間あまり時間がないことと、
DB構築を一人で行っており、このような内容を相談できるものがおりませんゆえ、
改めて、Index付加することを考えてみると、いまさら聞けないような内容かもしれませんが
ちゃんと把握したうえで、テーブル構築したいと思いますので
今までの他の皆様の経験からのノウハウなども踏まえて、
ご教授いただけると大変助かります。
No.1ベストアンサー
- 回答日時:
1:index作成の目安について
検索の条件になる項目で、重複があまり無い項目を作成すれば良いのでは無いでしょうか。また、テーブル作成時に特定のカラムに対してPKを設定するのであれば、PKには自動的にindexが付与されるので、ベット作成の必要は無いかと思われます。
いったん、テーブルを作ってみて、使いたいSQLをexplain analyzeで実行してみて、処理が遅い部分に関係しているカラムに対してindexを設定して行く方法をお勧めします
2:複合indexのメリット
indexサイズが小さくなります。ただ、指定の順番を間違うとindexが使われなくなるときもあります。
3:indexの付与対象について
indexはテーブルのカラムに対して付与するので、同一カラム名のindexを他のテーブルに作ったからと言って、違うテーブルで作成しなくて良い訳ではありません。
4についてはご質問の意図がよくわかりませんでした。
私の回答がお役に立てるようであれば幸いです。
ありがとうございます。
4の質問に関しましては、定義書の書き方で効率のよい書き方があれば
という内容でしたが、内部でよく話し合って書き方は精査したいと思います。
1,2,3の内容に関しましては、大変参考になりました。
また質問する機会ございましたら、よろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SELECT 文の NULL列は?
-
テーブルに存在しない列をselec...
-
2つのテーブルで引き算 postgres
-
オラクルでいうところのdescとs...
-
プロシージャとトリガー
-
バキューム処理の実行時間の目安
-
SQLServerでの複数テーブルから...
-
行数をカウントするSQLにつきま...
-
今度同じサークルだった女の子...
-
「テーブルに座って……」という...
-
オラクルのエクスポートについて
-
Accessでの稼働日数計算の方法
-
DELETE文とロックについて
-
会社の飲み会の幹事になり、座...
-
1対1のリレーション(主キー同...
-
データベースの接続に失敗して...
-
男性と2人で飲食店に行きテーブ...
-
MySQLテーブルの結合
-
テーブル(構造)のコピー
-
update文で改行を入れる
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SELECT 文の NULL列は?
-
テーブルに存在しない列をselec...
-
SQLでUPSERTを一度に複数行やる...
-
SQLにて指定日付より前、かつ最...
-
単純なselectが遅くなるのです...
-
PostgreSQLの断片化の状況を確...
-
javaでデータベース上のテーブ...
-
MS Access から PostgreSQL へ...
-
Postgresのデータ領域の拡張に...
-
UPDATE文の更新順序について
-
2つのテーブルで引き算 postgres
-
テーブルを作ろうとしたら。
-
postgres FILLFACTOR 確認方法
-
VIEWのCOPYってできないんですか?
-
reindex と update のデッドロック
-
最新レコードを抽出し外部結合...
-
デットロック回避策(autocommit...
-
PostgreSQL レコードからアイテ...
-
PostgreSQL 8.0.2 の ERROR: r...
-
複数テーブルにまたがるmax
おすすめ情報