我有以下表和索引定义:
CREATE TABLE ticket
(
wid bigint NOT NULL DEFAULT nextval('tickets_id_seq'::regclass),
eid bigint,
created timestamp with time zone NOT NULL DEFAULT now(),
status integer NOT NULL DEFAULT 0,
argsxml text,
moduleid character varying(255),
source_id bigint,
file_type_id bigint,
file_name character varying(255),
status_reason character varying(255),
...
)
Run Code Online (Sandbox Code Playgroud)
我在created时间戳上创建了一个索引,如下所示:
CREATE INDEX ticket_1_idx
ON ticket
USING btree
(created );
Run Code Online (Sandbox Code Playgroud)
这是我的疑问
select * from ticket
where created between '2012-12-19 00:00:00' and '2012-12-20 00:00:00'
Run Code Online (Sandbox Code Playgroud)
这个工作正常,直到记录数量开始增长(约500万),现在它将永远回归.
解释分析揭示了这一点:
"Index Scan using ticket_1_idx on ticket (cost=0.00..10202.64 rows=52543 …Run Code Online (Sandbox Code Playgroud) postgresql indexing query-optimization database-partitioning postgresql-performance