가 ...이 대신 DBA.stackexchange.com에 게시해야하는지 알려포스트 그레스는
하자 테이블 인덱스를 사용하지 보인다 I가 다음 쿼리 :
SELECT DISTINCT "court_cases".*
FROM "court_cases"
LEFT OUTER JOIN service_of_processes
ON service_of_processes.court_case_id = court_cases.id
LEFT OUTER JOIN jobs
ON jobs.service_of_process_id = service_of_processes.id
WHERE
(jobs.account_id = 250093
OR court_cases.account_id = 250093)
ORDER BY
court_cases.court_date DESC NULLS LAST,
court_cases.id DESC
LIMIT 30
OFFSET 0;
그러나 실행하는 데 2-4 초가 걸리며 웹 응용 프로그램에서는 단일 쿼리에 대해 받아 들일 수 없습니다. (외래 키 관계에있는 인덱스 포함) 여기 http://explain.depesz.com/s/Yn6
테이블 정의 쿼리에 관련된 사람들 테이블 : on the PostgreSQL wiki을 제안하고, 여기에 결과를 뒀다로
나는 쿼리에 EXPLAIN (ANALYZE, BUFFERS)
를 실행
http://sqlfiddle.com/#!15/114c6
WHERE
절이 서로 다른 두 테이블에서 쿼리하기 때문에 인덱스를 사용하는 데 문제가 있습니까? 이 인덱스를 실행하기 위해 쿼리에 어떤 종류의 인덱스 또는 변경을 할 수 있습니까?
PSQL=# select count(*) from service_of_processes;
count
--------
103787
(1 row)
PSQL=# select count(*) from jobs;
count
--------
108995
(1 row)
PSQL=# select count(*) from court_cases;
count
-------
84410
(1 row)
편집 :
이
문제의 테이블의 현재 크기입니다 그 중요한 경우 내가, PostgreSQL을 9.3.1에 있어요.
마지막으로 작성한 인덱스에서 구문 오류가 발생했습니다. 인덱스의 이름이 누락되었습니다. 'on'.'jobs (account_id, service_of_process_id)에 인덱스 생성 jobs_account_id_sop_id;와 같은 것이어야합니다. – nzifnab