Class Model(models.Model):
.......
.......
.......
.......
first_name = models.CHarField(max_length = 50)
last_name = models.CharField(ma_lenghth = 50)
def full_name():
return '%s %s' %(self.first_name, self.last_name)
- 효율적인 것
또는 장고 모델 최적화
Model.objects.filter().values('first_name, 'last_name')
더 나은 것 문자열 나중에 추가 보다.
문제는 데이터베이스 최적화에 관해서입니다. 기본적으로 모델의 메서드를 호출하면 전체 개체가로드되는지 아닌지를 알고 싶습니다. 그렇지 않으면 둘 다 동일한 데이터베이스 연산이 발생하지만 전체 개체를 값 메서드보다로드하는 것이 더 나은 최적화라고 생각합니다.
는 회신 해 주시기 바랍니다. 이 주제에 관한 경험이 있거나 경험이 있다면 비교할 수있는 통계를 공유하십시오. 이것은 실제 사례가 아니라 예제이며 모델에는 많은 다른 필드가 포함되어 있습니다. 몇는 defer()
또는 only()
를 사용하여도 바람직한 결과를 제공한다고 생각된다. 하지만 장고 설명서에서 발견 한 것은 기본적으로 해당 필드 데이터가 python 개체로 변환되는 것이 아니라 sql 조회로 변환되는 것을 방지한다는 것입니다. 그러므로 나는 그것이 더 나아질 것이라고 생각하지 않는다. 도와주세요. 미리 감사드립니다.
그래서 지연 또는 유일한 값을 사용하기로 동일하게 사용한다 ?? Django 문서에서는 지연 필드가있는 모델을 작성하는 데 약간의 오버 헤드가 있음을 명시합니다. 내가 충분히 이해할 수없는 것은 오버 헤드가 얼마이며, 값을 사용하는 것이 더 나은가하는 것입니다. –
아니요,'defer' /'only'는 메소드를 호출 할 수있는 실제 모델 인스턴스를 제공하지만 일부 필드는 빠져 있습니다. 'values'는 인스턴스가 아닌 사전을 제공하므로 메서드를 호출 할 수 없습니다. 이 시점에서 나는 당신이 지나치게 최적화되었다고 느끼는 것을 도울 수는 없지만 이것이 실제로 병목 현상이라는 것을 확인 했습니까? –
그래서 model.objects.only ('first_name', 'last_name')을 호출하면 get(). full_name()은 values 메소드를 호출하는 것과 동일합니다. 하지만이 유일한 방법은 SQL에서 파이썬 개체를 찾는 것이 아니라 SQL에서 파이썬 개체로 변환하는 것을 막는 것입니다. 그래서 나는 그렇게 빠르지 않을 수도 있다고 생각합니다. –