昨日作成されたすべてのレコードを数えようとしています。 created_at列があり、索引付けされています。インデックス付き日時フィールドのフィルタリング(*)が長すぎます
私は
explain
select count(*) from events where created_at::date = current_date - 1;
を実行する場合それはそう、それはイベントの種類のがありますどのように多くの行を知っている
Aggregate (cost=14365728.05..14365728.06 rows=1 width=0)
-> Index Only Scan using index_events_created_at on events (cost=0.57..14362310.20 rows=1367140 width=0)
Filter: ((created_at)::date = (('now'::cstring)::date - 1))
言います。しかし
select count(*) from events where created_at::date = current_date - 1;
クエリ自体は永遠に実行し続けます。何故ですか?
'イベントから選択カウント(*)'を使用するとどうなりますか? – McNets
「永遠に走り続ける」...あなたは文字通り意味するのですか、それともあなたが望む以上に長く走るのですか?それが長く実行されているが(最終的に終了する場合)、結果はExplainプランに表示される数値に近いですか? –
どのようなタイプが 'created_at'ですか? –