0

読み取りアクセス権しかなく、変更できない postgres データベース テーブルに対してクエリを実行しています。簡単に言えば、クエリを毎日実行して、数日間にわたってレコードを取得する必要があります。私は毎日行って、タイムスタンプパラメーターを物理的に変更しています。テーブルは約 4,000 万レコードで、SQL サーバーからリンク サーバーへのパススルー クエリを実行しています。

私が利用しようとしているタイムスタンプである c_stime フィールドにはインデックスがありますが、フィールドに対して関数を実行すると、その利点が失われます。ここに私の結果のいくつかがあります:

select * from p_table where c_stime >= '2013-09-24 00:00:00.0000000' 
select * from p_table where c_stime >= current_date::timestamp
select * from p_table where c_stime >= current_date+ interval '0 hour'

1回目は10秒、2回目は74秒、3回目は88秒。パフォーマンスが 1 番目に近い 2 番目/3 番目のようなダイナミックなものが必要です。どんな助けでも大歓迎

4

1 に答える 1

0

まず、クエリ プランを確認します。そこには驚きがあるかもしれません。

第二に、問題があなたの言うとおりであれば、これが機能しなかったことに驚いています。ただし、pg_catalog.* 関数を使用して型を変換できます。これらは不変です (クエリが計画される前に関数を実行できます)。

select * from p_table where c_stime >= pg_catalog.timestamp(current_date);
于 2013-11-18T06:53:43.023 に答える