Size: a a a

Django [ru] #STAY HOME

2020 June 29

AH

Andrey Hrishchenko in Django [ru] #STAY HOME
хз, что хуже, получать лишний раз .all() или же 2 запроса делать)
источник

I

Ivan in Django [ru] #STAY HOME
Andrey Hrishchenko
подскажите плс, в таком кейсе будет два запроса в базу или один?
first_name_query = MyModel.objects.filter(first_name=text)
if first_name_query.exists():
   return first_name_query.all()
Да ты можешь сразу алл вернуть
источник

N

Nire in Django [ru] #STAY HOME
Andrey Hrishchenko
подскажите плс, в таком кейсе будет два запроса в базу или один?
first_name_query = MyModel.objects.filter(first_name=text)
if first_name_query.exists():
   return first_name_query.all()
вообще это странно выглядит
источник

N

Nire in Django [ru] #STAY HOME
зачем там 4 пробела?
источник

N

Nire in Django [ru] #STAY HOME
Andrey Hrishchenko
хз, что хуже, получать лишний раз .all() или же 2 запроса делать)
так не бывает
источник

AH

Andrey Hrishchenko in Django [ru] #STAY HOME
Nire
зачем там 4 пробела?
поплыло)
источник

DB

Dima Boger in Django [ru] #STAY HOME
Andrey Hrishchenko
подскажите плс, в таком кейсе будет два запроса в базу или один?
first_name_query = MyModel.objects.filter(first_name=text)
if first_name_query.exists():
   return first_name_query.all()
один запрос на exists()

all тоже ленивый
источник

N

Nire in Django [ru] #STAY HOME
я бы сделал один запрос на all, и проверил внутри элементы
источник

I

Ivan in Django [ru] #STAY HOME
Dima Boger
один запрос на exists()

all тоже ленивый
Ну он если выполниться  будет два )
источник

AH

Andrey Hrishchenko in Django [ru] #STAY HOME
Dima Boger
один запрос на exists()

all тоже ленивый
в любом случае при кейсе, когда exists() вернёт tru - это 2 запроса будет, так что по всей видимости проще all сразу вернуть
источник

DB

Dima Boger in Django [ru] #STAY HOME
Ivan
Ну он если выполниться  будет два )
Если выполнится будет два. Но exists() сильно быстрее чем доставание из базы и сериализация в модели, кмк
источник

DB

Dima Boger in Django [ru] #STAY HOME
В целом зависит от задачи, да

Если оно там дальше не фильтерится больше, а так и обрабатывается, то можно .all() возвращать

Если дальше идёт бранчевание и с пустым кверисетом код не работает, то я бы предпочёл exists()
источник

NC

Nikolay Cherniy in Django [ru] #STAY HOME
Dima Boger
Если выполнится будет два. Но exists() сильно быстрее чем доставание из базы и сериализация в модели, кмк
+++ не стоит боятся экзистс и каунт, они дешевые
источник

А

Алексей in Django [ru] #STAY HOME
Nikolay Cherniy
+++ не стоит боятся экзистс и каунт, они дешевые
каунт дешевая?
источник

NC

Nikolay Cherniy in Django [ru] #STAY HOME
Алексей
каунт дешевая?
да
источник

NC

Nikolay Cherniy in Django [ru] #STAY HOME
ну если сравнивать с тем что ты тягаешь все данные, а потом считаешь, как сам думаешь?)
источник

А

Алексей in Django [ru] #STAY HOME
https://postgrespro.ru/docs/postgrespro/12/functions-aggregate
Примечание
Пользователи с опытом использования других СУБД SQL могут быть недовольны скоростью агрегатной функции count, когда она применяется ко всей таблице. Подобный запрос:

SELECT count(*) FROM sometable;
потребует затрат в количестве, пропорциональном размеру таблицы: Postgres Pro придётся полностью просканировать либо всю таблицу, либо один из индексов, включающий все её строки.
источник

А

Алексей in Django [ru] #STAY HOME
помимо этого есть статьи, как ускорить каунт вроде приблизительного подсчета через костыли базы
источник

NC

Nikolay Cherniy in Django [ru] #STAY HOME
Алексей
https://postgrespro.ru/docs/postgrespro/12/functions-aggregate
Примечание
Пользователи с опытом использования других СУБД SQL могут быть недовольны скоростью агрегатной функции count, когда она применяется ко всей таблице. Подобный запрос:

SELECT count(*) FROM sometable;
потребует затрат в количестве, пропорциональном размеру таблицы: Postgres Pro придётся полностью просканировать либо всю таблицу, либо один из индексов, включающий все её строки.
И?
источник

А

Алексей in Django [ru] #STAY HOME
нельзя утверждать, что это дешевая операция в отличие от екзиста
источник