PostgreSQL8.2にてとあるSQLをexplain analyzeしたところ、

以下のようなSeq Scanがおこなわれていました。

-> Seq Scan on table1 (cost=0.00..117687.72 rows=4055597 width=8) (actual time=0.049..17140.716 rows=4053133 loops=1)
Filter: (((f1)::text = 'xxx'::text) AND ('2007-12-31 00:00:00'::timestamp without time zone <= date) AND (date < '2008-02-01 00:00:00'::timestamp without time zone) AND (xxx_id = 1))

どのようなインデクスを作成すればIndex Scanになりますか?

回答の条件
  • 1人2回まで
  • 登録:2008/05/10 04:40:05
  • 終了:2008/05/10 22:02:50

回答(2件)

id:b-wind No.1

b-wind回答回数3344ベストアンサー獲得回数4402008/05/10 11:46:08

ポイント28pt

コメントが開いていないのでこちらで。


テーブル設計もSQLも出ていないようでは回答のしようが無い。

サンプルでいいので少しは情報を出してもらわないと。


あと、実際に取得するデータが多い場合はインデックススキャンよりテーブルスキャンのほうが

効率がよいことも有る。この場合どのようにインデックスを張ってもそれが使われることは無い。

id:bayan No.2

bayan回答回数100ベストアンサー獲得回数132008/05/10 17:35:44

ポイント42pt

出ている情報だけでがんばって推測してみます。


次のようなSQLですかね。

SELECT * 
FROM table1
WHERE f1 = 'xxx'
  AND '2007-12-31 00:00:00' <= date
  AND date < '2008-02-01 00:00:00'
  AND xxx_id = 1

フィールド名からすると xxx_id は何かのキーになっているようなので、

まずはインデックスをはってみますか。

例えば、

CREATE INDEX idx_table1_xxx_id ON table1

あと効果があるとしたら日時が格納されていそうな date でしょうか。

すでに作成済みならごめんなさい。

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません