Добрый день, уважаемое сообщество.
Надоело, что при работе с большими массивами данных в БД слишком долго идет выборка данных из таблички по определенным временным меткам в формате 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: