ли это делать?
в таблице есть данные которые сохраняются каждые 5 минут, мне нужно выбрать из этой таблицы данные с интервалом в 15 минут, написал вот такой запрос, он выполняет то что мне нужно, но может я сделал это не совсем правильно и есть более легкий способ?
select from where datefield between date1 and date2
Спонталыку мне лучшего решения в голову не приходит. Считать арифметику с датами по-любому придется. Почему бы и не так? Если там прямо МНОГО данных, можно попробовать сделать вьюху или (если постгря) отнаследовать таблицу и шардить в нее только данные с этим же фильтром.
не совсем понял что за вьюха и что значит отнаследовать? и да, данных много, уже больше 4-х миллионов
Почитай маны про create view - это "виртуальная" таблица, в которой данные уже отфильтрованы на стороне БД, еще на стадии дописывания новых записей в исходную таблицу. Но тут будет оверхед при записи. Зато запросы сразу станут простыми. Наследование таблиц в постгре позволяет создать новую таблицу, наследованную от исходной - тоже своего рода view, но механизм иной. Используется для шардинга данных.
Ну это не оптимизирует запрос и любые изменения потребуют миграцию. Такое себе решение.
Да, тут палка о двух концах. Но я и сказал выше, что быстро придумать как можно иначе отфильтровать даты, мне в голову не приходит. Но если стоит задача ускорить обработку запроса, то вьюха могла бы стать решением, потому что оптимизирует сами данные еще ДО запроса.
Обсуждают сегодня