
テーブルは2つ
・offacc_siwakedata
・off_projectmster
とあり、それぞれ下記インデックスを張っております。
create index siwakedata_index
ON offacc_siwakedata(
siwakedata_date,
siwakedata_hdcd,
siwakedata_cd,
siwakedata_kamokucode,
siwakedata_projectcode,
siwakedata_exzankada,
siwakedata_default,
siwakedata_compcd,
siwakedata_del
);
CREATE INDEX projectmster_index
ON off_projectmster(
projectmster_cd,
projectmster_del,
projectmster_compcd
);
2つのテーブルを結合させる下記SQLを発行
explain
select
offacc_siwakedata.*,
off_projectmster.projectmster_name
from offacc_siwakedata,off_projectmster
where
off_projectmster.projectmster_cd=siwakedata_projectcode
and
off_projectmster.projectmster_del='1'
and
off_projectmster.projectmster_compcd='200'
and
siwakedata_compcd='200'
and
siwakedata_del='1'
and
siwakedata_default='1'
and
siwakedata_kamokucode='26300'
and
siwakedata_exzankada<>0
order by
siwakedata_date,
siwakedata_hdcd,
siwakedata_cd
;
explainするとoff_projectmsterのインデックスが有効になっていません。
何ででしょうか?
教えてください。
宜しくお願いします。
"Nested Loop (cost=0.00..17438.04 rows=1 width=1307)"
" Join Filter: ((off_projectmster.projectmster_cd)::text = (offacc_siwakedata.siwakedata_projectcode)::text)"
" -> Index Scan using siwakedata_index on offacc_siwakedata (cost=0.00..17436.98 rows=1 width=1244)"
" Index Cond: (((siwakedata_kamokucode)::text = '26300'::text) AND ((siwakedata_default)::text = '1'::text) AND ((siwakedata_compcd)::text = '200'::text) AND (siwakedata_del = 1))"
" Filter: (siwakedata_exzankada <> 0::numeric)"
" -> Seq Scan on off_projectmster (cost=0.00..1.04 rows=1 width=96)"
" Filter: ((projectmster_del = 1) AND ((projectmster_compcd)::text = '200'::text))"
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
データは、何件くらい格納していますか?
ANALYZEは、未実行ですか?
表定義、INSERT文の例を、貼り付けてもらえると、アドバイスする方も助かるのですけどね?
PostgreSQLのバージョンは、何ですか?
PostgreSQLは、データ件数が少ないと、コスト情報を未取得でも、ディフォルト値でインデクスを使用しない場合があるようです。
RDBMSの常識として、インデクスの先頭構成列から順に、インデクスを有効利用できる条件式を指定するほど、インデクスを活用できます。
index siwakedata_indexの先頭~3番目は、order by指定しかなく、4番目以降が条件指定なので、これでは有効利用できません。4番目以降を先頭に持って来た方が、いいのではないでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
デットロック回避策(autocommit...
-
「テーブルに座って……」という...
-
まるいテーブル 円い 丸い 漢字...
-
SQL*LoaderでCSVから指定した列...
-
下記、問題に対しての解答が以...
-
sqlplusで表示が変なので、出力...
-
MACアドレス見えない
-
処理の途中で停止させ、再開さ...
-
Microsoft Access:クエリのフ...
-
C#で電卓のプログラムを組んで...
-
ACCESSで成績管理
-
update文で改行を入れる
-
「クリップボードにコピーされ...
-
AUTO_INCREMENTの抜け番
-
クリスタルレポートで検索条件...
-
重複クエリを使ったデータ削除
-
男性と2人で飲食店に行きテーブ...
-
お金持ちのテーブル
-
SQL Server management studio ...
-
アクセス2010について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SELECT 文の NULL列は?
-
テーブルに存在しない列をselec...
-
SQLにて指定日付より前、かつ最...
-
SQLでUPSERTを一度に複数行やる...
-
PostgreSQLの断片化の状況を確...
-
単純なselectが遅くなるのです...
-
MS Access から PostgreSQL へ...
-
javaでデータベース上のテーブ...
-
2つのテーブルで引き算 postgres
-
Postgresqlのレポート機能について
-
reindex と update のデッドロック
-
Postgresのデータ領域の拡張に...
-
デットロック回避策(autocommit...
-
テーブルにcsvファイルをインポ...
-
PostgreSQL 8.0.2 の ERROR: r...
-
PostgreSQL レコードからアイテ...
-
同一カラムに複数条件指定
-
備品管理のデータベースについて
-
PostgresSQLでテーブル定義の抽...
-
DISTINCTとGROUP BYの違い
おすすめ情報