人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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になりますか?


●質問者: gaiajp
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:00 2007-12-31 F1 INDEX ON
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● b-wind
●28ポイント

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


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

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


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

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


2 ● bayan
●42ポイント

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


次のような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 でしょうか。

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ