Насколько медленнее используется .only () против .values ​​()? - PullRequest
2 голосов
/ 17 декабря 2011

Я использую в основном .values() для ускорения моих запросов к Django.

Недавно я попытался использовать .only(), который, как я предполагал, лишь немного медленнее, чем значения, с дополнительным преимуществом отсутствия необходимости иметь дело со словарями (например, опечатки ключей, без автозаполнения кода)

Но, похоже, что при загрузке 1000 объектов .only() работал на ~ 0,5-1 секунду медленнее, чем если бы я использовал .values() (что занимает около 4 с).

Кто-нибудь из вас испытывал подобное поведение, и может ли кто-нибудь подтвердить или опровергнуть это наблюдение?

1 Ответ

4 голосов
/ 17 декабря 2011

Хотя сам запрос, вероятно, займет примерно столько же времени, я подозреваю, что разница в производительности вы видите на стороне Python. Когда вы используете метод only, вы по-прежнему получаете полные объекты Django из базы данных. Они дороги в настройке и занимают намного больше памяти. Они фактически становятся практически полностью неуправляемыми при работе с более чем несколькими тысячами предметов.

Метод 'values', как вы знаете, помещает все в стандартный словарь Python. С ними гораздо сложнее работать, но время установки тривиально, а использование памяти значительно меньше.

Если вы хотите проверить фактическую разницу в длине запроса, обратитесь к панели инструментов отладки django . Это даст вам удобный профилированный список каждого запроса, выполненного для загрузки страницы.

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