Приходилось ли анализировать планы запросов в БД
Python
Senior
Мой Офис
Приходилось ли анализировать планы запросов в БД
Ответы
Да, приходилось. В PostgreSQL для анализа планов запросов использую `EXPLAIN ANALYZE`, который показывает реальный план выполнения и статистику. В Django можно использовать `connection.queries` для просмотра сгенерированных SQL-запросов.
Пример анализа в PostgreSQL:
```
EXPLAIN ANALYZE
SELECT * FROM users WHERE age > 30;
```
В Django ORM для оптимизации:
```
from django.db import connection
# До оптимизации
users = User.objects.filter(age__gt=30)
print(connection.queries)
# После оптимизации - используем select_related/prefetch_related
optimized = User.objects.filter(age__gt=30).select_related('profile')
```
Ключевые моменты при анализе:
- Ищем Seq Scan (линейное сканирование), которое можно заменить на Index Scan
- Обращаем внимание на стоимость операций (cost)
- Проверяем наличие лишних JOIN или подзапросов
- Смотрим на количество обрабатываемых строк (rows)