我有一个包含大约5百万行的Postgres表。我想知道有多少行匹配 start_time >= NOW()
,但尽管在start_time上建立了索引,查询非常缓慢(需要几个小时)。
EXPLAIN SELECT COUNT(*) FROM core_event WHERE start_time >= NOW();
Aggregate (cost=449217.81..449217.82 rows=1 width=0)
-> Index Scan using core_event_start_time on core_event (cost=0.00..447750.83 rows=586791 width=0)
Index Cond: (start_time >= now())
这是该表的模式信息:
id | integer | not null default nextval('core_event_id_seq'::regclass)
source | character varying(100) | not null
external_id | character varying(100) |
title | character varying(250) | not null
location | geometry | not null
start_time | timestamp with time zone |
stop_time | timestamp with time zone |
thumb | character varying(300) |
image | character varying(100) |
image_thumb | character varying(100) |
address | character varying(300) |
description | text |
venue_name | character varying(100) |
website | character varying(300) |
city_id | integer |
category | character varying(100) |
phone | character varying(50) |
place_id | integer |
image_url | character varying(300) |
event_type | character varying(200) |
hidden | boolean | not null
views | integer | not null
added | timestamp with time zone |
我在以下字段上建立了索引:
city_id
external_id (unique)
location
location_id
place_id
start_time
有没有简单的方法可以加快查询速度(例如,部分索引),还是我必须通过按日期对数据进行分区来解决问题?