gpt4 book ai didi

sql - PostgreSQL:在 timestamp::DATE 上创建索引

转载 作者:行者123 更新时间:2023-11-29 11:12:54 33 4
gpt4 key购买 nike

<分区>

我正在创建一个汇总表,汇总给定日期的所有事件。

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 非常糟糕 - 它在 event 表上运行顺序扫描,根本不使用索引:

->  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 索引?

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com