Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
queryset.filter() — возвращает ленивый объект QuerySet, запрос к базе не выполняется, считать скорость выполнения бессмысленно.
Сравнивать различные запросы к бд и замерять курлом время получения ответа так же некорректно, т.к. гораздо больше времени будет затрачено на миддлвари/сериализацию данных.
A QuerySet is iterable, and it executes its database query the first time you iterate over it. For example, this will print the headline of all entries in the database:
for e in Entry.objects.all(): print(e.headline)
Выбор метрик
Изначально я подумал, что считать время фильтрации в питоне получится, используя таймер для получения времени исполнения скрипта, и дополнительной метрикой должно было стать время исполнения запроса через curl, поскольку это показывает приблизительное время, за которое отфильтрованные данные дойдут до конечного пользователя. Кроме этого, следует сравнивать это время с эталонным (прямым исполнением соответствующих запросов в БД).
Он не выполняется только если это было первое объявление queryset, у меня его специально нет. Да и время выполнения скрипта было бы меньше, чем в Postgres, если бы запрос не выполнялся. Но это не так.
Сравнение разных django filter на примере демо базы PostgreSQL