Функция для вывода текущего времени в формате unixtime

Добрый день, уважаемое сообщество.

Надоело, что при работе с большими массивами данных в БД слишком долго идет выборка данных из таблички по определенным временным меткам в формате unixtime.
Придумал простейшую функцию, которая единожды в начале запроса определяет текущее время в формате unixtime, и теперь вычисление текущего времени происходит не для каждой строки, а один раз, оптимизируя запрос в разы:

--создать функцию
CREATE FUNCTION now_unixtime() returns integer AS $$
SELECT extract(epoch FROM now())::integer AS result;
$$ LANGUAGE sql;
 
 
--Удалить функцию
DROP FUNCTION now_unixtime();
 
 
 
--выводим все строки за последний час, стандартным способом
SELECT *
FROM --моя табличка
WHERE unixtime >= extract(epoch FROM now()) - 3600;
 
75215 запись(ей) выделено [Извлечь (fetch) MetaData: 6мс] [Извлечь данные: 1с] 
[Выполнено: 21.09.2016 10:45:07] [Выполнение: 47с] 
 
 
--выводим все строки за последний час, с помощью функции
SELECT *
FROM --моя табличка
WHERE unixtime >= now_unixtime() - 3600;
 
75326 запись(ей) выделено [Извлечь (fetch) MetaData: 8мс] [Извлечь данные: 1с] 
[Выполнено: 21.09.2016 10:43:58] [Выполнение: 5с] 
 
 
 
 
 
 

Комментарии

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

Додумал функцию конвертации

Додумал функцию конвертации timestamp в unixtime:

CREATE FUNCTION to_unixtime(x timestamp WITH time zone) RETURNS integer AS $$
SELECT extract(epoch FROM x)::integer AS result;
$$ LANGUAGE sql;

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

Back to top

(С) Виктор Вислобоков, 2008-2010