我正在寻找以下几者之间对处理器最友好的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'
答案 0 :(得分:3)
从某种意义上说,是的。第二个查询可以使用last_time_hit
上的索引,这可以使查询运行得更快,更快。即使在这种情况下没有索引,当一个可用时,将BETWEEN
用于其他情况也是一个好习惯。
通常,函数的使用排除了索引的使用 - 除了基于表达式的索引。 (Postgres有可能在第一种情况下对索引进行全面扫描;这比扫描表稍微有效,但不是使用索引时通常会得到的大赢。)