다른 유형/ID의 데이터에 대해 존재하지 않는 회사 및 날짜의 테이블에서 데이터를 선택하려고합니다. 큰 테이블에서 특정 ID가 동일한 열에 존재하지 않는 데이터를 선택합니다. 쿼리 속도 향상
다른 방법을 넣어, 나는wh_calc_id = 344
이 같은
company_id/dates_id
조합이 곳
wh_calc_id = 368
존재하지 않는 경우
company_id, dates_id, daily_val
를 원한다. 이들은 그것을 내 두 시도이다
Select rows which are not present in other table
:
시도 1 :
SELECT distinct on (company_id, dates_id) company_id, dates_id, daily_val
FROM daily_data d1
WHERE NOT EXISTS (
SELECT 1
FROM daily_data d2
WHERE d1.company_id = d2.company_id
and d1.dates_id = d2.dates_id
and d1.wh_calc_id = 368
and d2.wh_calc_id = 368
)
and d1.wh_calc_id = 344
문제 :
나는 느슨하게이 예제를 다음과 같은거야 을 그것은 매우 느린 27 분
시도 2 : [제거]
모든 하나 (거대한) 테이블 : COMPANY_ID의 INT (인덱스), dates_id의 INT (인덱스), wh_calc_id의 INT (인덱스), daily_val 숫자
내가 속도를 도움이 될 인덱스를 추가하는 열려있어 사물을 올렸지 만 색인은?
포스트 그레스 (10)
PS - 나는 그들이 완료하기 전에 두 쿼리를 죽일했다, 그래서 제대로 작성하는 경우 난 정말 모르겠어요. 바라기를 나의 설명은 돕는다.
그것은 왼쪽으로 부엉이 이렇게 : (회사 id, dates_id) company_id, dates_id, daily_val FROM daily_data에서 구분 별개 d1 LEFT JOIN daily_data d2 ON d1.company_id = d2.company_id 및 d1.dates_id = d2.dates_id 및 d1.wh_calc_id = 368 및 d2.wh_calc_id = 368 d1.wh_calc_id = 344 및 d2.company_id는 NULL입니다. 그리고 열을 통해 사용할 인덱스를 만듭니다 : 테이블에 일일 데이터를 생성합니다 (company_id, dates_id, wh_calc_id); –