나는 두 모델 이제 장고 또는
class Video(models.Model):
name = models.CharField(max_length=200)
class Store(models.Model):
name = models.CharField(max_length=200)
videos = models.ManyToManyField('Video')
나는 다음의 검색어를하고 그 쿼리
qs = Video.objects.filter(Q(store__name="blockbuster") | Q(pk__in=[1,2,3,4]))
print qs.query
다음을 인쇄 다음 한 절 (외부 대신에 노동 조합의 참여 왼쪽) 느린 쿼리를 생성 쿼리가 생성됩니다. 나는이 쿼리 상에 설명 계획을 수행 할 때
SELECT `video`.`id`, `video`.`name`,
FROM `video` LEFT OUTER JOIN `store` ON (`store`.`video_id` = `video`.`id`)
WHERE (`store`.`name` = "blockbuster" OR `video`.`id` IN (1, 2, 3, 4))
, MySQL은 전체 테이블은 가능한 모든 인덱스를 추가에도 불구하고, 비디오 테이블에 스캔 않습니다. 이것은 나에게 많은 비용이 든다. 어떻게하면 MySQL을 강제로 색인을 사용하거나 django를 사용하여 UNION ALL
을 사용하는 대신 'OR'를 사용하는 것이 더 빠릅니까?
당신이 두 개의 별도의 컬렉션을 가져 오는 한 후 오히려 충돌을 제거 간주 되세요 Q() | Q()를 사용하는 것보다? – schillingt