2011-12-14 5 views
0

는 여기 목록장고 : 효율적인 데이터베이스 검색

사용자이다, 특정 사용자를 찾을 수 내 모델을 검색 할 수있는 효율적인 방법이 필요 - 등
이벤트 사용자 이름의 목록을, - 그들이 사용할 수 없을 때 모든 사용자에 대한 이벤트의 테이블
기술 - 대일 - 대다 사용자와의 관계, 사용자는
계약 기술을 많이 가질 수 사용자와 함께, 사용자는 여러 개의 계약서에 ork (완료된 경우)
...

그래서 User 테이블에 연결된 많은 테이블이 있습니다. 특정 기준에 맞는 사용자를 검색해야합니다. 예를 들어, 그는 다음 주 목요일부터 금, 금, x/y/z 기술을 보유하고 있으며, 완성 된 모든 계약서에 평균 4 점을 받았습니다.

데이터베이스를 조회 한 횟수를 최소화하면서이 검색을 효율적으로 수행 할 수있는 방법이 있습니까? 죄송합니다.이게 아주 새답니다.

감사합니다.

+0

유일한 옵션은 비정규 화입니다. 벤치마킹을 시도하여 가장 효율적으로 선택하십시오. – DrTyrsa

+0

이것은 읽기 속도와 저장 (쓰기 속도) 사이의 균형입니다. 내가 시도하고자하는 것은 데이터베이스를 두 번 친하지만 검색 집합을 줄이는 2 단계 검색입니다. 먼저 가용성을 검색 한 다음 사용 가능한 범위 내에서 검색을 수행하고 다른 기술/평가/등 기준을 사용합니다. – reedvoid

+0

이것은 이론적 인 문제가 아니며 벤치마킹이 필요합니다. 때로는 여러 개의 개별 쿼리가 복잡한 쿼리보다 빠르거나 때로는 그렇지 않을 수도 있습니다. DB 히트 번호 자체는 아무 것도 보여주지 않습니다. 3 개의 인덱스 된 룩업은 조인과 서브 쿼리가있는 1 개의 무거운 쿼리보다 빠릅니다. – DrTyrsa

답변

1

이 방법으로 모든 4 가지 문제를 해결할 수 있는지는 잘 모르겠지만 최소한 첫 번째 경우에는 도움이됩니다. 사용자 데이터를 효율적으로 쿼리합니다.

보통 values 또는 values_list 쿼리 함수는 실제 SQL의 SELECT 부분을 줄이기 때문에 더 빠르기 때문에 더 빨리 결과를 얻을 수 있습니다. 이것에 관해서는 Django docs.

또한 valuesvalues_list 사이의 새 개발자 버전부터 many_to_one을 포함한 모든 유형의 관계를 쿼리 할 수 ​​있습니다.

마지막으로 in_bulk도 유용 할 수 있습니다. 복잡한 쿼리를 수행하는 경우 values 또는 values_list을 사용하여 일부 모델의 ID를 쿼리 한 다음 in_bulk을 사용하여 모델 인스턴스를 더 빨리 가져올 수 있습니다. 약 Django docs입니다.