我正在查询一个 postgres 数据库表,我只能读取该表,并且无法以任何方式修改。长话短说,我需要每天运行一个查询以在几天内提取记录。我每天都在物理修改时间戳参数。该表大约有 4000 万条记录,我正在运行从 sql 服务器到链接服务器的传递查询。
c_stime字段上有一个索引,这是我试图利用的时间戳,但是当我在字段上执行函数时,我扼杀了这种优势。以下是我的一些结果:
select * from p_table where c_stime >= '2013-09-24 00:00:00.0000000'
select * from p_table where c_stime >= current_date::timestamp
select * from p_table where c_stime >= current_date+ interval '0 hour'
第一个在 10 秒内运行,第二个在 74 秒内运行,第三个在 88 秒内运行。想要像第二/第三种一样的动态产品,性能接近第一台。任何帮助表示赞赏
首先,检查您的查询计划。 那里可能会有惊喜。
其次,如果问题如你所说,我很惊讶这行不通。 但是,您可以使用 pg_catalog.* 函数来转换类型,这些类型是不可变的(允许在计划查询之前运行函数),因此您可以尝试:
select * from p_table where c_stime >= pg_catalog.timestamp(current_date);