주문

2012-01-12 6 views
1

사람은 누구나 API 호출이 유형에 어려움이 있었다 :주문

projects.annotate(votes_count=Count('votes')).order_by('votes_count') 

나는이 관련 문제를 발견 그것은 나를 위해 극심한 느린과 :

https://code.djangoproject.com/ticket/17144

을 다른 사람이이 문제를 겪고 있는지 또는 좋은 해결 방법이 있는지 궁금합니다. 버그가 더 많은 견인력을 갖지 않는다는 것에 놀랍니다.

+0

가능하면 SQL을 덤프하고 일부 DB 조정을 수행해야합니다 – zsong

답변

1

티켓에는 특별히 MySQL이 언급되어 있습니다. 나는 PostgreSQL을 사용하고 있으며 주목할만한 속도 저하없이 항상 주석을 사용합니다. 그러나, 나는 생성 된 SQL을 똑같이하는지 특별히 확인하지 않았다.

당신이 MySQL을 사용하는 경우, (그들 중 누구도 특히 멋진,이기는하지만) 당신은 잠재적으로 다음을 선택할 수 있습니다 보일 수있을 것입니다 :

  1. 스위치를 PostgreSQL을 넘어서. 필자의 일화 적 증거와 티켓에있는 PostgreSQL에 대한 불만이 부족하다면 문제가되지 않을 수도 있습니다.

  2. 현재 무료로 제공되며 출시 될 때 1.4로 업그레이드하십시오.

  3. 현재 트렁크를 벗어나 실행하여 (일반적으로 좋은 생각은 아닙니다) 현재 설치를 패치하십시오.

  4. @jknupp 제안대로 raw()을 사용하십시오.

4가 현재 가장 쉽고 좋은 방법 일 것입니다. 장래에 데이터베이스 엔진을 전환하지 않으면 문제가되지 않으며 장고가 업데이트 될 때 올바른 방법으로 코드에 메모 할 수 있습니다. 일반적으로 비슷한 시나리오에서 다음과 같은 작업을 수행합니다.

"""Django has a bug in version 1.3 (see ticket: 
https://code.djangoproject.com/ticket/17144), resulting in unnecessary fields 
being included in the GROUP BY clause and subsequently very slow queries. The raw 
query below can be replaced with the commented line once the issue has been 
corrected. 
""" 
# projects.annotate(votes_count=Count('votes')).order_by('votes_count') 
projects.raw(...) 
1

이 문제를 해결하려면 raw() SQL 쿼리를 사용할 수 있습니다. 그것은 가장 좋은 방법은 아니지만 작동 할 것입니다. 설명서를 참조하십시오 here