SQL HowTo: наперегонки со временем

В PostgreSQL несложно написать запрос, который уйдет в глубокую рекурсию или просто будет выполняться гораздо дольше, чем нам хотелось бы. Как от этого защититься?А чтобы еще и полезную работу сделать? Например, набрать следующий сегмент данных при пос…

PostgreSQL Antipatterns: куда крутить NULLS

Периодически приходится разбирать случаи внезапного промаха запроса мимо «вроде бы подходящего» индекса — а все дело оказывается в чуть-чуть не той сортировке. Читать далее…

SQL HowTo: обход дерева иерархии «по курсору» через двойную рекурсию

В предыдущих статьях «PostgreSQL Antipatterns: навигация по реестру», «PostgreSQL 13: happy pagination WITH TIES» и «SQL HowTo: курсорный пейджинг с неподходящей сортировкой» я уже рассматривал проблемы навигации по данным, представленных в виде плоско…

«Ленивый сахар» PostgreSQL

SQL — декларативный язык — то есть вы описываете «что» хотите получить, а СУБД сама решает, «как» именно она будет это делать. Некоторые из них при этом позволяют им «подсказывать», как именно лучше выполнять запрос, но PostgreSQL — нет.Тем не менее, «…

PostgreSQL Antipatterns: в этом плане кто-то лишний

Сегодня будет рассказ про избыточные группировки и сортировки в SQL-запросах — как они возникают, по каким признакам их можно потом вычислить и как избавиться от них. Читать далее…

SQL HowTo: разные варианты работы с EAV

Соблазн использовать модель EAV (Entity-Attribute-Value) при организации структуры БД весьма велик, особенно когда предметная область заранее плохо известна (или разработчик просто не хочет в нее углубляться). Это ведь так удобно — создать «универсальн…

SQL HowTo: «простое» прогнозирование

В «Тензоре» мы разрабатываем множество сервисов для управления бизнесом. А в бизнесе очень часто возникает желание немного «заглянуть в будущее» — спрогнозировать и увидеть на графике значение каких-то величин, которые мы можем только предполагать на о…

PostgreSQL Antipatterns: делаем группировку быстрее от 0.1 до 5 раз

Примитивный запрос — простой джойн и группировка. Традиционные методы оптимизации — казалось бы, что могло пойти не так?..Небольшой эксперимент, на тему необходимости проверки любых гипотез в конкретных условиях. Читать далее…

SQL HowTo: считаем «уников» на интервале

Для систем управления бизнесом часто приходится решать очень похожий класс задач по вычислению количества уникальных объектов на произвольном временном интервале. В контексте CRM это могут быть «пользователи, обращавшиеся на горячую лини…

k-means in Clickhouse

Реализация алгоритма k-средних на диалекте SQL без питонов и дополнительных библиотек. Читать далее