Какие подходы применял при оптимизации запросов к БД
Python
Middle
Без компании
Какие подходы применял при оптимизации запросов к БД
Ответы
Оптимизация запросов к БД включает несколько ключевых подходов:
- **Индексация** – создание индексов на часто используемых полях в WHERE, JOIN, ORDER BY.
Пример:
```
# До
User.objects.filter(name__startswith='A') # Без индекса на name
# После
class User(models.Model):
name = models.CharField(db_index=True) # Добавляем индекс
```
- **Оптимизация запросов** – использование `select_related` и `prefetch_related` в Django для уменьшения количества запросов.
```
# Плохо: N+1 проблема
users = User.objects.all()
for user in users:
print(user.profile.age)
# Хорошо
users = User.objects.select_related('profile').all()
```
- **Денормализация** – в некоторых случаях добавление избыточных данных для ускорения чтения.
- **Кэширование** – использование Redis/Memcached для хранения результатов тяжелых запросов.
- **Анализ запросов** – EXPLAIN в PostgreSQL или QuerySet.explain() в Django для понимания плана выполнения.
- **Пакетная обработка** – bulk_create, update вместо множества отдельных запросов.
- **Оптимизация структуры БД** – правильные типы данных, партиционирование.
Главное – измерять производительность до и после изменений!