Расскажи про опыт работы с сложными запросами
Python
Middle
Без компании
Расскажи про опыт работы с сложными запросами
Ответы
Работал с оптимизацией SQL-запросов в Django ORM и сырыми SQL для сложных аналитических отчетов. Основные подходы:
- **Оптимизация ORM**:
```
from django.db.models import Count, Sum
queryset = Order.objects.annotate(
total_items=Count('items'),
total_price=Sum('items__price')
)
```
- Использовал `select_related` и `prefetch_related` для уменьшения числа запросов.
- Применя `annotate` и `aggregate` для вычислений на стороне БД.
- **Сырые SQL**:
```
from django.db import connection
with connection.cursor() as cursor:
cursor.execute("""
SELECT user_id, SUM(amount) OVER (PARTITION BY user_id)
FROM transactions
""")
```
- Для оконных функций и сложных джойнов использовал `cursor.execute` или `RawSQL`.
- **Индексы и EXPLAIN**:
- Анализировал планы запросов через `EXPLAIN ANALYZE`, добавлял индексы для ускорения.
- **NoSQL**:
- Работал с агрегациями в MongoDB (например, `$group`, `$lookup`).
Кейс: оптимизировал отчет с 10+ джойнами, сократив время выполнения с 15 сек до 500 мс через переписывание запроса и добавление составных индексов.