2016-04-04 2 views
0

Я ищу самую удобную для процессора инструкцию SQL между следующими.Использует ли «to_char()» больше процессора, чем «BETWEEN» в PostgreSQL?

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' 
+2

CPU не проблема здесь, но IO. Следовательно, оригинал «тот, который использует меньше CPU», является проблемой XY. – zerkms

+0

может быть также достигнута замена 'SELECT COUNT (*)' на 'SELECT COUNT ()', * при условии, что таблица имеет первичный ключ. * –

+0

@HaleemurAli, что заставляет вас так думать? – zerkms

ответ

3

В некотором смысле, да. Второй запрос может использовать индекс на last_time_hit, который может заставить запрос работать намного быстрее. Даже без индекса в этом случае, хорошая привычка использовать BETWEEN для других ситуаций, когда он доступен.

В общем, использование функций исключает использование индекса - за исключением индексов на основе выражений. (Возможно, Postgres выполнит полное сканирование индекса в первом случае, это немного более эффективно, чем сканирование таблицы, но не большая победа, которую вы обычно получаете при использовании индекса.)

Смежные вопросы