2012-04-17 3 views
0

Django 1.3 응용 프로그램과 통합 된 PostgreSql에 7 개의 테이블이 있습니다. 다른 열 데이터를 가진 모든 테이블에 존재하는 이름을 기반으로 액세스 할 7 개의 테이블 중 일부입니다. 특정 이름 그래서 내 문제는 테이블의 특정 이름 데이터에 속하는 모든 행을 검색해야한다는 것입니다.django를 이용한 Postgres DB 질의 검색 효율

그래서 검색 작업을위한 장고 모델 orm 쿼리 세트를 구현했습니다.하지만 효과적이지 않습니다. 페이지를로드하는데도 많은 시간이 걸리고 심지어 모든 테이블의 모든 컬럼에 대한 인덱스를 만들었습니다 .

아직도 내가 의 nginx-504 게이트웨이 시간 초과

그래서, 내가 너무 1,00,000 행을 모든 테이블에서 검색해야 할 쿼리를 최적화 할 필요가 무엇입니까.

쿼리 최적화를 향상시키는 데 필요한 방법은 무엇입니까?

어떻게 이러한 어려운 작업을 위해 장고에서 접근합니까? 여기

나는 내 코드를 붙여 http://pastebin.com/yNy5pxGG

나에게 올바른 방향을 제시하십시오!

EDIT1 :

내 쿼리 : http://pastebin.com/A9B2ExVk

테이블 :

fda_sheet1 = 208778 unique rows 
fda_sheet2 = 291958 unique rows 
fda_sheet3 = 191958 unique rows 
fda_sheet4 = 676363 uniq rows 
fda_sheet5 = 262651 
fda_sheet6 = 742707 
fda_sheet7 = 300000 

이 내 개별 테이블과 나는 좌에 모두의 가입 만드는 중이 행 counts.here 있습니다 성능을 위해 하나의 테이블을 만듭니다.

테이블 크기가 700GB를 초과하므로이 또한 좋지 않습니다.

쿼리를 처리하는 방법은 무엇입니까?

참고 :

이 표는 우리가 ISR 더 .Also ISR이 더 우리가 ISR을 가져옵니다 약물에 다른 모든 tables.Based에 기존되지 않습니다 약물 이름을 가진 data.Mainly의 다양한 수준을 포함 아니요, ISR을 사용하면 다른 테이블의 다른 데이터를 쿼리합니다. 당신이 병목

그래서

, 테이블을 결합 1.에게 이해 희망도 각 테이블의 여러 행이 같은 ISR 더 가지고 있기 때문에 여러 테이블에 걸쳐 문제를 700기가바이트

2.Querying를 건너 이후 문제입니다.

다른 가장 좋은 방법이 있습니까?

하십시오 당신이 날이 문제를 해결하기 위해 우리를 제안

PLZ 알려 의심이있는 경우.

+0

당신은 쿼리 플래너 출력과 함께 느린 SQL 쿼리 중 하나를 게시 할 수 있습니까? –

+0

@TommasoBarbugli 내가 쿼리 플래너 알고리즘 또는 일반 원시 SQL 쿼리를 사용해야합니까? – Nava

+0

@saravana : 나는 다른 누구도 알지 못하지만, SQL과 SQL의 EXPLAIN ANALYZE의 출력을 볼 수 있다면 가장 도움이 될 수 있습니다. – kgrittn

답변

1

당신은 당신의 모든 쿼리 (list에 캐스팅)과 total_data을 만들 평가 후 매김 을 다하고 있습니다. 따라서 페이지 매기기가 작동하기 전에 모든 데이터를 검색하고 메모리에 저장해야합니다. 당신은 그것을 피해야합니다. 내가 볼로

또한, 당신은 하나의 객체에 대한 데이터가 7 개 개의 다른 테이블의 분할이 - 그것은 장고의 ORM에 대한 나쁜 것입니다. 데이터베이스 스키마를 수정할 수없는 경우 데이터베이스에 뷰를 작성하여 모두 하나로 결합하여 하나의 그랜드 테이블을 시뮬레이트 할 수 있습니다.

빈 필드에 대한 모든 결합 및 검사는 DB에서 수행되므로 훨씬 더 명확한 Python 코드가 제공되며 훨씬 빠르게 작동합니다.