django-debug-toolbar
설치pip install django-debug-toolbar
INSTALLED_APPS = [
# ...
'django.contrib.staticfiles',
# ...
'debug_toolbar',
]
MIDDLEWARE = [
# ...
'debug_toolbar.middleware.DebugToolbarMiddleware',
# ...
]
# 이거 안하면 Django rest Framework의 Response 로 return 하는 구조에서 툴바가 뜨지 않음
DEBUG_TOOLBAR_CONFIG = {
"SHOW_TOOLBAR_CALLBACK": lambda request: True,
}
STATIC_URL = '/static/'
import debug_toolbar
from django.conf import settings
from django.urls import include, path
urlpatterns = [
...
path('__debug__/', include(debug_toolbar.urls)),
]
selected_choice.votes += 1
#실행시 데이터베이스의 값을 참조 -> 메모리에 로딩 -> 연산 -> 결과값 데이터베이스에 저장
#single instance
select_choice.votes = F("votes") + 1
#데이터베이스 자체에서 연산 -> 결과값 저장
#querysets of object instances
reporter = Reporters.objects.filter(name='Tintin')
reporter.update(stories_filed=F('stories_filed') + 1)
인덱스 사용
모델의 필드 옵션으로 db_index를 추가하면 해당 필드에 대해서 database index가 생성된다.
인덱스의 여러개 사용
어떤 곳에 사용해야하는가?
데이터 수정시 성능
UPDATE, DELETE 는 WHERE 절에 잘 설정된 인덱스로 조건을 붙여주면 조회할 떄 성능은 크게 저하되지 않음
(업데이트 할 데이터를 찾을 떄의 속도가 빨라지는 것이지, 업데이트 자체가 빨라지는 것은 아님)
INSERT의 경우, 새로운 데이터 추가 > 기존에 인덱스 페이지에 저장되어 있던 탐색 위치가 수정되어야 하므로 효율이 좋지 않음
Lazy Evaluation(지연 연산)
list()
을 사용해서 강제로 평가시킬 수도 있다.bool()
을 쓴다면 결과가 존재하는지 여부를 판단할 수 있다.주의해야할 문법
len(queryset)
쓰지말것if queryset
보다 나음entry.blod.id
말고 (foreign key를 참조한 테이블에서 object가져옴)entry.blod_id
이렇게 사용(foreign key만 가져옴)