Google BigQuery에서 버그를 발견했지만 확실하지 않습니다. 누군가가 대안을 제시 할 수 있기를 희망합니다.여러 조인을 사용하는 이유는 무엇입니까?
테이블 나는 200K의 데이터만을 가진 테이블에서 실행하고 있습니다.
이이 ~ 삼초한다 : 나는 다음과 같은 기괴한 행동을 우연히 깔때기 분석 할 내 시도에
이SELECT
COUNT(DISTINCT Q0._user_id) AS step0
FROM
(SELECT _user_id FROM [5629499534213120.201501]) AS Q0
LEFT OUTER JOIN
(SELECT _user_id, _time FROM [5629499534213120.201501] WHERE _os=='Windows') AS Q1
ON (Q0._user_id=Q1._user_id)
이 ~ 3 분 정도 소요을 :
SELECT
COUNT(DISTINCT Q0._user_id) AS step0
FROM
(SELECT _user_id FROM [5629499534213120.201501]) AS Q0
LEFT OUTER JOIN
(SELECT _user_id, _time FROM [5629499534213120.201501] WHERE _os=='Windows') AS Q1
ON (Q0._user_id=Q1._user_id)
LEFT OUTER JOIN
(SELECT _user_id, _time FROM [5629499534213120.201501] WHERE _country=='de') AS Q2
ON (Q0._user_id=Q2._user_id)
의미 하나 더 왼쪽 결합을 추가하면 쿼리가 믿을 수 없을 정도로 느려집니다 (데이터는 약 200k에 불과합니다). 당신이 주요 문제에 초점을 맞출 수 있도록
분명히, 내가 선택 문을 단순화 (내가 사용하는 실제 SELECT 문은 훨씬 더 복잡하다)
사람이 문제, 또는에 대한 해결 방법 무엇을 알고 있나요?
LEFT OUTER JOIN [5629499534213120.201501] AS Q2 ON (Q0._user_id = Q2._user_id 및 Q2._country == 'de')'이 발생하면 어떻게됩니까? 나는 당신의 내부 질의가 인덱스를 사용할 수있는 능력을 깨뜨릴 수 있다고 생각한다. –
"ON 절은 각 테이블의 한 필드 이름과 테이블 이름 앞에 접두사가 붙은 모든 필드 이름을 비교해야한다." – shaylevi2
좋아요, Q2._country == 'de'를 WHERE 절로 옮기는 것은 어떨까요? –