1

私はこのクエリを持っています(簡単にするために編集されています):

select to_timestamp(s.sampletimestamp/1000)
from sample s
where s.sampletimestamp >= extract(EPOCH FROM TIMESTAMP WITH TIME ZONE '2013-08-11 00:00:00+10')*1000 and
s.sampletimestamp < extract(EPOCH FROM TIMESTAMP WITH TIME ZONE '2013-08-12 00:00:00+10')*1000
order by s.sampletimestamp;

時間の値を手動で入力すると、これがはるかに速く実行されることに気付きました。

select to_timestamp(s.sampletimestamp/1000)
from sample s
where s.sampletimestamp >= 1376143200000 and
s.sampletimestamp < 1376229600000
order by s.sampletimestamp;

ここで、時間はミリ秒単位のエポック タイム スタンプです。私の推測では、コンピューターはextract(EPOCH...)レコードごとにパーツを評価していますが、実際には一度だけ行う必要があります。

クエリを2番目と同じくらい効率的に保ちながら、最初のクエリのより人間が読める形式を維持する方法はありますか?

私は PostgreSQL を初めて使用します (そして完全に独学です) ので、私が最も苦しんでいる問題は、Google に入力する必要がある特定のキーワードを知らないことだと思います。これは、PostgreSQL のドキュメントと同様に既に使用しています。

前もって感謝します :)

EDIT1:非常に詳細な返信をありがとう。私はおそらく、ほとんどの回答者とは異なるタイムゾーンにいるのではないかと思います.明日、実験的な証拠を提供します(ここでは非常に遅いです).

EDIT2:以下の答えを要約すると、「bigint」でキャストするとうまくいきます。交換:

where s.sampletimestamp >= extract(EPOCH FROM TIMESTAMP WITH TIME ZONE '2013-08-11 00:00:00+10')*1000 and
s.sampletimestamp < extract(EPOCH FROM TIMESTAMP WITH TIME ZONE '2013-08-12 00:00:00+10')*1000

と:

where s.sampletimestamp >= extract(EPOCH FROM TIMESTAMP WITH TIME ZONE '2013-08-11 00:00:00+10')::bigint*1000 and
s.sampletimestamp < extract(EPOCH FROM TIMESTAMP WITH TIME ZONE '2013-08-12 00:00:00+10')::bigint*1000
4

1 に答える 1