PostgreSQL:在timestamp上创建一个索引:: DATE [复制]
发布时间:2020-12-13 16:13:01 所属栏目:百科 来源:网络整理
导读:参见英文答案 PostgreSQL: Index the day part of a timestamp2个 我正在创建一个汇总表,汇总给定日期内的所有事件. INSERT INTO graph_6( day,event_type,(SELECT COUNT(*) FROM event e WHERE event_type = e.event_type AND creation_time::DATE = sq.day
参见英文答案 >
PostgreSQL: Index the day part of a timestamp2个
我正在创建一个汇总表,汇总给定日期内的所有事件. INSERT INTO graph_6( day,event_type,(SELECT COUNT(*) FROM event e WHERE event_type = e.event_type AND creation_time::DATE = sq.day) FROM event_type CROSS JOIN (SELECT generate_series( (SELECT '2014-01-01'::DATE),(SELECT '2014-01-02'::DATE),'1 day') as day) sq; creation_time列已编制索引: CREATE INDEX event_creation_time_date_idx ON event USING BTREE(creation_time); 但是,即使仅使用少量事件(2014年1月1日至2日)查询两天的数据,查询也会运行很长时间. 关于查询的EXPLAIN非常严峻 – 它在事件表上运行顺序扫描,根本不使用索引: -> Seq Scan on event e_1 (cost=0.00..12557.39 rows=531 width=38) Filter: ... AND ((creation_time)::date = (generate_series(($12)::timestamp with time zone,($13)::timestamp with time zone,'1 day'::interval)))) 我假设这是因为我们比较了一个铸造值 – creation_time :: DATE,而不是creation_time.我试过索引转换: CREATE INDEX event_creation_time_date_idx ON event USING BTREE(creation_time::DATE); 但是得到了一个错误: ERROR: syntax error at or near "::" 有没有办法在投放到DATE的时区列上使用PostgreSQL索引?
索引声明中的表达式应该包含在其他括号中,请尝试:
CREATE INDEX event_creation_time_date_idx ON event ((creation_time::DATE)); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |