Какие шаги предпримешь, если SQL-запрос долго выполняется
Python
Senior
Okko
Какие шаги предпримешь, если SQL-запрос долго выполняется
Ответы
**Оптимизация SQL-запроса:**
- **Анализ запроса** через `EXPLAIN ANALYZE` для выявления узких мест (например, отсутствие индексов).
- **Добавление индексов** на часто используемые поля в условиях `WHERE`, `JOIN`.
- **Оптимизация структуры запроса** — избегать `SELECT *`, использовать `LIMIT`, переписать сложные подзапросы как `JOIN`.
**Пример с индексом:**
```
# До оптимизации
cursor.execute("SELECT * FROM users WHERE age > 30") # Медленно без индекса
# Добавляем индекс (SQL-команда)
cursor.execute("CREATE INDEX idx_age ON users(age)")
# После оптимизации
cursor.execute("SELECT id, name FROM users WHERE age > 30 LIMIT 100") # Быстрее
```
**Доп. меры:**
- Кэширование результатов (Redis, Memcached).
- Разбивка больших запросов на пагинацию (`OFFSET`, `LIMIT`).
- Проверка нагрузки на БД и масштабирование (репликация, шардинг).
Если проблема не решается — переход к профилированию сервера БД.