Как ускорить SQL запрос
Python
Middle
Без компании
Как ускорить SQL запрос
Ответы
Оптимизация SQL запросов в Python зависит от СУБД, но есть универсальные подходы:
- **Индексы** – убедитесь, что запрос использует индексы для колонок в WHERE/JOIN:
```
# Для SQLAlchemy
session.query(User).filter(User.name == 'John').all() # name должен быть проиндексирован
```
- **LIMIT/OFFSET** – вместо полной выборки используйте пагинацию:
```
session.query(User).limit(100).offset(200).all()
```
- **JOIN вместо подзапросов** – подзапросы часто медленнее:
```
# Плохо
subq = session.query(Order.user_id).filter(Order.price > 100)
session.query(User).filter(User.id.in_(subq)).all()
# Лучше
session.query(User).join(Order).filter(Order.price > 100).all()
```
- **EXPLAIN** – анализируйте план выполнения запроса:
```
# PostgreSQL пример
result = session.execute("EXPLAIN ANALYZE SELECT * FROM users")
print(result.fetchall())
```
- **Кэширование** – используйте Redis/memcached для часто повторяющихся запросов.
- **Материализованные представления** – для сложных агрегаций.
- **Оптимизация ORM** – избегайте N+1 проблемы с `.joinedload()` в SQLAlchemy:
```
session.query(User).options(joinedload(User.orders)).all()
```
Для больших таблиц также помогает партиционирование и шардинг данных.