아무 것도 이해할 수 없습니다. Oracle 11g db에는 많은 데이터와 테이블이 있습니다. 일부 테이블에 가입하고 결과를 출력하고 싶습니다. 좋아, 단지 썼다 :SQL 쿼리 최적화 도구
SELECT *
FROM Table1
LEFT JOIN Table2 ON Table2.Table1_Id = Table1.Table1_Id
WHERE Table2.Column1=1
매우 간단하지만 너무 느린. 좋아요, Table2는 Table3과 연결되어 있습니다. 이 테이블에는 Table1과 일반적으로 연결되어 있음을 알려주는 몇 가지 플래그가 있습니다. 나는 다음 코드를 작성 :
SELECT * FROM Table1 LEFT JOIN Table2 ON Table2.Table1_Id = Table1.Table1_Id LEFT JOIN Table3 ON Table3.Table3_Id = Table2_Table3_Id WHERE Table3.ColumnWithFlag LIKE '%some id info about Table1%' AND Table2.Column1=1
를이 쿼리는 빠른 첫 번째 쿼리 후 저렴한 비용을 가지고. 왜, 이해가 안되니? 내 쿼리에서 3 테이블을 사용하고 더 빨리 작업 한 다음 2 테이블 (행 개수는 동일하고 데이터는 동일)로 쿼리합니다.
OUTER JOIN 인 경우 외부 테이블의 조건을 WHERE 절에 넣지 말고 대신 ON 절에 넣으십시오. (그렇지 않은 경우 수행되는 정규 내부 조인입니다.) – jarlh
@jarlh, 외부 조인시 ON 절과 Where 절의 조건이 매우 다릅니다. 잘못된 결과가 나오지 않도록 조심해야합니다. 어디에서 행을 걸러 낼 것인가? ON에서는 그렇지 않다. –
두 번째 질의에 추가 된 조건이있다. 'Table3.ColumnWithFlag LIKE'대부분의 데이터를 필터한다고 가정하는 Table1 % '에 대한 일부 ID 정보 귀하의 결과 세트,하지만 여전히 텍스트 파싱이고 'LIKE'는이 작업을 수행하는 데 매우 효율적이지 않습니다. 그러나 이것은 추측 일뿐입니다. 두 쿼리의 실행 계획을 비교하여 "병목 현상"이 어디에 있는지 확인하는 것이 가장 좋습니다. –