, 내 모든 쿼리는 장고에 의해 만들어집니다, 그래서 내가 더 필기 질문이 없습니다.전체 텍스트 인덱스는 내가 장고를 사용하고
: 고객이 꽤 실수의 버전을 단축 할 수 말했다subscriberno
이후
BillRecords.objects.filter(subscriberno__icontains='123456')
...
필터가 같은 쿼리를 출력 : 내 장고 필터에서, 나는 같은 필터링 쿼리를 사용
SELECT "subscriberno" FROM "BillRecords" WHERE UPPER("subscriberno"::text) LIKE UPPER(E'%123456%');
subscriberno
은 일부 숫자에 alphas와 일부 특수 문자가 포함되어 있기 때문에 char 필드입니다.
내 데이터베이스에는 동료가 만든 해당 열에 대해 두 개의 인덱스가 있습니다. 나는 그런 쿼리에 대한 두 개의 인덱스를 사용하여 궁금
"BillRecords_subscriberno" btree (subscriberno)
"BillRecords_fsubscriberno_like" btree (subscriberno varchar_pattern_ops)
는 논리적이다. 우리 장고 필터는 모두 icontains
을 사용하고 위와 같이 작성 쿼리를 작성해야합니다.
Seq Scan on BillRecords (cost=0.00..159782.40 rows=370 width=15) (actual time=579.637..3705.079 rows=10 loops=1)
Filter: (upper((subscriberno)::text) ~~ '%123456%'::text)
Total runtime: 3705.106 ms
(3 rows)
그래서, 지금까지 내가 보는 바와 같이, 인덱스를 사용하지 다음과 같이
포스트 그레스 쿼리의 분석이다. 인덱스 usega는 데이터 삽입 및 업데이트에 비용이 필요하기 때문에 사용법이없는 두 개의 인덱스가 있습니다. (이 분석에서 볼 수있는 한) 논리적이지 않습니다.
django가 비슷한 icontanis
필터에 대해 다른 쿼리를 출력 할 수있는 channce가 있습니까? 또는 내 색인은 전혀 쓸모가 없습니까?
실제로 PostgreSQL 9.1은 'like'% foo % ''를 사용하여 "contains"쿼리에 대한 색인을 사용할 수 있습니다. http://www.depesz.com/index.php/2011/02/19/waiting-for-9-1-faster-likeilike/ –
@a_horse_with_no_name : 오른쪽 - 오. 나는 (전체 텍스트 모듈 또는 다른 종류의 문자열 토크 나이저에 링크되어 있지 않다면) 추가해야한다. – Tim
나는 구독자 이름을 사용할 수 없다.) : 내가 가지고있는 모든 것은 __subscriberno__이다. 이것은 다른 구독 유형에 관한 정보를 보유하고있는 "일종의 시스템"이다. 그래서 다양한 구독 형식이 있고 몇 가지 서식이 몇 가지에 적용된다. 그들의... – FallenAngel