当前位置: 首页 > 面试题库 >

PostgreSQL:在timestamp :: DATE创建一个索引

陶朝明
2023-03-14
问题内容

这个问题已经在这里有了答案

PostgreSQL:索引时间戳的一天部分 (2个答案)

5年前关闭。

我正在创建一个汇总表,以汇总给定一天中的所有事件。

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


问题答案:

索引声明中的表达式应放在其他方括号中,请尝试:

CREATE INDEX event_creation_time_date_idx ON event ((creation_time::DATE));


 类似资料:
  • 本文向大家介绍postgresql 创建一个纯JSON表,包括了postgresql 创建一个纯JSON表的使用技巧和注意事项,需要的朋友参考一下 示例 要创建纯JSON表,您需要提供一个类型为的字段JSONB: 您还应该创建一个基本索引: 此时,您可以将数据插入表中并进行有效查询。

  • 列出索引 为何无法显示索引的值? 如何创建一个可以显示值出来的索引呢?

  • 问题内容: 我正在使用官方elasticsearch npm。在我的节点应用程序中,我正在使用该客户端创建索引,如下所示 我需要为上述索引放入映射,因此,我必须先创建一个空索引(无数据索引),然后必须执行放置映射,然后将数据放入索引。 因此,我必须创建一个空索引,但是在正式的Elasticsearch客户端中,上述方法(create)是用“ ”方法编写的,因此它需要一个主体。 为此,我必须如上所述

  • CreateIndexes 根据struct中的tag来创建索引 CreateUniques 根据struct中的tag来创建唯一索引

  • 问题内容: 我有一个名为的表,我想对它们进行排序,以表最填写的顺序。每个列都是JSONB列或TEXT列。我并不需要很确定,因此通常我按以下顺序订购: 但是,这很慢,因此我想创建一个索引。但是,这不起作用: 也没有 不能说我很惊讶。声明此索引的正确方法是什么? 问题答案: 要测量文本表示形式中行的大小,您可以将整个行都转换为文本,这比连接单个列要快得多: 但是索引中的此表达式存在3(或4)个问题: