0
私はPostgreSQL 9.2.8を使用しています。タイムスタンプでデータを取得する最も効率的な方法
私のようなテーブルを持っている:この表は、約4.000.000行が含まれてい
CREATE TABLE foo
(
foo_date timestamp without time zone NOT NULL,
-- other columns, constraints
)
。ある日のデータは約50,000行です。
私の目標は、できるだけ早く1日分のデータを取得することです。
私は次のようにインデックスを作成しました:
CREATE INDEX foo_foo_date_idx
ON foo
USING btree
(date_trunc('day'::text, foo_date));
そして今、私は(now()
は一例であり、私はその日からデータを必要とする)は、このようなデータを選択しています:
select *
from process
where date_trunc('day'::text, now()) = date_trunc('day'::text, foo_date)
このクエリは約20秒続く。
短時間で同じデータを取得する可能性はありますか?
テーブルにプライマリキーがありますか? 'foo_date'はその一部ですか? (IMO foo_dateは少なくとも候補キーの1つでなければなりません) – joop
@joop fooは主キーを含んでいます - 単純な 'bigint' id。 'foo_date'はその一部ではありません – ilovkatie
このデータを取得して画面に表示していますか?ネットワーク接続を介して50,000行を取得するだけで、UIにはこれらの行が表示されるため、時間がかかることになります。これらの行を取得するサーバーでは問題にならないかもしれませんが、ボトルネックは別の場所にある可能性があります。私はPostgreSQLのツールをあなたがどこでこれをチェックできるかを指摘するのに十分なことは分かっていませんが、他の誰かがそうするかもしれません。 –