是" to_char()"使用更多的CPU而不是" BETWEEN"在PostgreSQL中

时间:2016-04-04 23:27:54

标签: sql database postgresql

我正在寻找以下几者之间对处理器最友好的SQL语句。

SQL应该在两种情况下都返回:今天"last_time_hit"字段的记录数。

声明1:

SELECT COUNT(*) 
FROM chrono 
WHERE to_char(last_time_hit, 'YYYY-MM-DD') = to_char(CURRENT_TIMESTAMP, 'YYYY-MM-DD')

声明2:

SELECT COUNT(*) 
FROM chrono 
WHERE last_time_hit BETWEEN CURRENT_DATE AND CURRENT_DATE - interval '1 second'

1 个答案:

答案 0 :(得分:3)

从某种意义上说,是的。第二个查询可以使用last_time_hit上的索引,这可以使查询运行得更快,更快。即使在这种情况下没有索引,当一个可用时,将BETWEEN用于其他情况也是一个好习惯。

通常,函数的使用排除了索引的使用 - 除了基于表达式的索引。 (Postgres有可能在第一种情况下对索引进行全面扫描;这比扫描表稍微有效,但不是使用索引时通常会得到的大赢。)