Ответ
Да, активно использовал. Оптимизация и реализация сложной логики часто напрямую зависели от возможностей конкретной СУБД.
На проекте с PostgreSQL я применял:
- CTE (Common Table Expressions) и рекурсивные запросы для работы с иерархическими данными (деревьями категорий).
- Оконные функции (Window Functions) для аналитических отчетов без необходимости денормализации данных.
-- Пример: ранжирование заказов по сумме внутри каждого клиента SELECT customer_id, order_id, amount, RANK() OVER (PARTITION BY customer_id ORDER BY amount DESC) as rank_in_customer FROM orders; - JSONB-тип данных для хранения полуструктурированных данных с возможностью индексации и сложных запросов.
- Транзакции с уровнем изоляции
SERIALIZABLEв критичных к согласованности финансовых операциях.
На проекте с MySQL (InnoDB):
- Индексы покрытия (Covering Indexes) для ускорения SELECT-запросов, когда индекс содержал все необходимые поля.
- Использование
Generated Columns(VIRTUAL/STORED) для предрасчета и индексации выражений, например, хэша от некоторых полей для быстрого поиска дублей.
Использование этих возможностей позволяло переносить логику и вычисления на уровень БД, что значительно снижало нагрузку на приложение и объем передаваемых данных.