Встречается на собеседованиях • сегодня

Как ускорить зависающий SQL-запрос

Оптимизация SQL-запросов в Python требует анализа и доработки на нескольких уровнях:

  1. Индексы - убедитесь, что запрос использует индексы для JOIN, WHERE и ORDER BY:
python
# Для Django ORM
Model.objects.filter(some_field=value).explain()  # проверить использование индексов
  1. Оптимизация запроса:
  • Избегайте SELECT * - выбирайте только нужные поля
  • Используйте LIMIT для тестирования
  • Замените подзапросы на JOIN
  1. Кэширование:
python
from django.core.cache import cache

def get_data():
    key = 'expensive_query'
    result = cache.get(key)
    if not result:
        result = list(MyModel.objects.filter(...))  # тяжелый запрос
        cache.set(key, result, timeout=3600)
    return result
  1. Денормализация - иногда стоит добавить избыточные данные для ускорения выборок

  2. Профилирование:

python
# Для PostgreSQL
from django.db import connection
with connection.cursor() as cursor:
    cursor.execute("EXPLAIN ANALYZE SELECT * FROM my_table")
    print(cursor.fetchall())

Для сложных случаев рассмотрите использование материализованных представлений или выделенных сервисов обработки данных.

Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы