Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 本年度业绩选择表_Postgresql_Date_Where_Query Performance - Fatal编程技术网

Postgresql 本年度业绩选择表

Postgresql 本年度业绩选择表,postgresql,date,where,query-performance,Postgresql,Date,Where,Query Performance,我知道很多这样做的方法 date_field > firstday and date_field < current_date date_part('year',date_field) = date_part('year',current_date) 日期字段>第一天和日期字段to\u date(to_char(当前日期,'YYYY')| |'-01-01','YYYY-MM-DD') 和日期字段=date\u trunc(“年”,当前日期)日期字段=用于性能调整使用解释计划比较执

我知道很多这样做的方法

date_field > firstday and date_field < current_date
date_part('year',date_field) = date_part('year',current_date)
日期字段>第一天和日期字段<当前日期
日期部分(“年”,日期字段)=日期部分(“年”,当前日期)
还有其他一些。目前,我们使用的脚本是第一个示例,用于计算从一年的第一天到现在的东西,但是一年的第一天是硬编码的。完成查询大约需要2.4秒

我想我应该改变它,然后像第二种方式一样,但是查询大约需要19.7秒才能完成。我想我会走另一条路

date_field > to_date(to_char(CURRENT_DATE,'YYYY')||'-01-01','YYYY-MM-DD')
and date_field < CURRENT_DATE
date\u field>to\u date(to_char(当前日期,'YYYY')| |'-01-01','YYYY-MM-DD')
和日期字段<当前日期

这会将查询降低到1.5s。我试着在谷歌上搜索,但没有发现所有这些不同选项的性能,我想我会把它扔到这里,让我的上级帮助启发我。

比较执行计划-我打赌
将使用索引和
日期\u trunc
将不使用。我不推荐对数据应用函数的方法,例如
日期部分(“年”,这里的列)
删除对该列上任何索引的访问…除非有函数索引。但是,如果您计算实际的起点和终点,并将日期/时间与之进行比较,而不是试图转换每个日期/时间以查看其是否符合条件,通常会更快、更容易。建议:
date\u field>=date\u trunc(“年”,当前日期)日期字段
不确定您为什么没有在较低的日期使用>=用于性能调整使用解释计划比较执行计划-我打赌
将使用索引而
date\u trunc
将不使用我不推荐将函数应用于数据的方法,例如
日期部分(“年”,这里的列)
删除对该列上任何索引的访问…除非有函数索引。但是,如果您计算实际的起点和终点,并将日期/时间与之进行比较,而不是试图转换每个日期/时间以查看其是否符合条件,通常会更快、更容易。建议:
date\u field>=date\u trunc(“年”,当前日期)和日期字段
不确定为什么没有在较低的日期使用>=进行性能调整使用解释计划