Как ускорить 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() ``` Для больших таблиц также помогает партиционирование и шардинг данных.