제목에 잘못된 질문이있을 수 있습니다. 사실은 다음과 같습니다.
Django 기반 사이트의 관리 인터페이스에서 고객 조회를 수행 할 때 고객 서비스 담당자가 응답 시간이 느리다고 불평했습니다.
우리는 Postgres 8.4.6을 사용하고 있습니다. 느린 쿼리 로깅을 시작하고이 범인을 발견했습니다.
SELECT COUNT(*) FROM "auth_user" WHERE UPPER("auth_user"."email"::text) LIKE UPPER(E'%deyk%')
이 쿼리는 실행하는 데 32 초 이상 걸립니다. EXPLAIN에서 제공하는 쿼리 계획은 다음과 같습니다.
QUERY PLAN
Aggregate (cost=205171.71..205171.72 rows=1 width=0)
-> Seq Scan on auth_user (cost=0.00..205166.46 rows=2096 width=0)
Filter: (upper((email)::text) ~~ '%DEYK%'::text)
이것은 Django Admin 응용 프로그램에서 생성 된 Django QuerySet에서 Django ORM에 의해 생성 된 쿼리이므로 쿼리 자체를 제어 할 수 없습니다. 색인은 논리적 솔루션처럼 보입니다. 속도를 높이기 위해 색인을 만들려고했지만 차이가 없었습니다.
CREATE INDEX auth_user_email_upper ON auth_user USING btree (upper(email::text))
내가 도대체 뭘 잘못하고있는 겁니까? 이 쿼리 속도를 높이려면 어떻게해야합니까?