我正在查询postgres数据库表,我只能读取访问权限并且无法以任何方式进行修改。长话短说我需要每天运行一个查询来记录几天的记录。我每天都在进行物理修改时间戳参数。该表大约有4000万条记录,我正在运行从sql server到链接服务器的查询。
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秒内运行。想要像第二个/第三个那样动态的东西,性能接近第一个。任何帮助表示赞赏
答案 0 :(得分:0)
首先,检查您的查询计划。那里可能会有惊喜。
其次,如果问题与你说的一样,我很惊讶这不会奏效。但是,您可以使用pg_catalog。*函数来转换类型,这些函数是不可变的(允许在计划查询之前运行该函数),因此您可以尝试:
select * from p_table where c_stime >= pg_catalog.timestamp(current_date);