Какие знаешь способы оптимизации чтения БД
Python
Senior
СБЕР Роботы
Какие знаешь способы оптимизации чтения БД
Ответы
- **Индексация** – создание индексов на часто используемых полях для ускорения поиска.
```
# Пример создания индекса в SQLAlchemy
class User(db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(100), index=True) # Индекс на поле name
```
- **Пагинация** – разбивка данных на страницы для уменьшения нагрузки.
```
# Пример пагинации в Flask-SQLAlchemy
users = User.query.paginate(page=1, per_page=10)
```
- **Ленивая загрузка (Lazy Loading)** – загрузка связанных данных только при обращении.
```
# SQLAlchemy: lazy='select' (по умолчанию)
class Post(db.Model):
comments = db.relationship('Comment', lazy='select')
```
- **Жадная загрузка (Eager Loading)** – предварительная загрузка связанных данных для избежания N+1 проблемы.
```
# SQLAlchemy: joinedload
from sqlalchemy.orm import joinedload
posts = Post.query.options(joinedload(Post.comments)).all()
```
- **Кэширование** – сохранение результатов запросов (Redis, Memcached).
- **Оптимизация запросов** – использование `select` вместо `select *`, избегание подзапросов.
- **Репликация и шардинг** – распределение нагрузки между серверами.
- **Использование ORM-оптимизаций** – например, `bulk_insert`, `update` вместо поштучных операций.
- **Анализ запросов** – инструменты типа `EXPLAIN` в PostgreSQL для выявления узких мест.