Oracle 가입 시 인덱스를 사용하지 않음
제가 계획을 색인하고 설명하는 것은 처음이니 참고해주세요!쿼리를 조정하려고 하는데 문제가 있습니다.
테이블이 두 개 있습니다.
SKU
------
SKUIDX (Unique index)
CLRIDX (Index)
..
..
IMPCOST_CLR
-----------
ICCIDX (Unique index)
CLRIDX (Index)
...
..
내가 할 때는.select * from SKU where clridx = 122
, 설명 계획에 있는 인덱스를 사용하고 있음을 알 수 있습니다(TABLE Access라고 되어 있습니다).INDEX, OBject_NAME 아래 인덱스 이름으로 표시되며 옵션은 RANGE SCAN)입니다.
동일한 필드에 가입하려고 하면 인덱스를 사용하지 않는 것으로 나타납니다(TABLE Access라고 표시됨).해시 조인(HASH JOIN) 및 옵션 아래에는 FULL(전체)이라고 표시됩니다.
인덱스를 사용하지 않는 이유를 확인하려면 무엇을 찾아야 합니까?죄송합니다, 어떤 명령어를 입력해야 이것을 표시할 수 있는지 잘 모르니 더 많은 정보가 필요하시면 말씀해주세요.
예:
첫번째 쿼리:
SELECT
*
FROM
AP21.SKU
WHERE
CLRIDX = 100
두 번째 쿼리:
SELECT
*
FROM
AP21.IMPCOST_CLR
WHERE
CLRIDX = 100
세 번째 쿼리:
SELECT
*
FROM
AP21.SKU
INNER JOIN
AP21.IMPCOST_CLR ON
IMPCOST_CLR.CLRIDX = SKU.CLRIDX
이 쿼리를 보십시오.
SELECT
*
FROM
AP21.SKU
INNER JOIN
AP21.IMPCOST_CLR ON
IMPCOST_CLR.CLRIDX = SKU.CLRIDX
추가 술어가 없습니다.따라서 SKU의 모든 행을 IMPCOST_CLR의 모든 행에 결합하는 것입니다.또한 두 표에서 모든 열을 선택하고 있습니다.
이는 Oracle이 두 테이블을 모두 읽어야 한다는 것을 의미합니다.가장 효율적인 방법은 Full Table Scan(전체 테이블 스캔)을 사용하고, 다중 블록 읽기의 모든 행을 퍼올리고, 결합 값과 일치하도록 해싱을 사용하는 것입니다.
기본적으로 이는 SQL이 매우 잘 수행하는 반면 인덱스된 읽기는 RBAR가 더 높습니다.다음과 같은 추가 술어를 포함하도록 세 번째 쿼리를 변경한 경우
WHERE SKU.CLRIDX = 100
액세스 경로가 INDEX RANGE SCAN으로 되돌아가는 것을 볼 수 있습니다. 비교 가능한 소수의 행만 선택하기 때문에 인덱스된 읽기가 다시 한 번 더 효율적인 경로입니다.
"내가 튜닝하려는 쿼리는 수백 개가 훨씬 더 길지만, 그것을 분해하고 단계적으로 진행합니다!"
이것은 좋은 기술이지만 Oracle optimizer가 어떻게 작동하는지 이해해야 합니다.설명 계획서에는 많은 정보가 있습니다.자세히 알아보세요.의 가치에 주목해야 합니다.Rows
각 단계에 대한 열입니다.Optimizer가 작업에서 얻을 수 있는 행 수를 알려줍니다.처음 두 쿼리의 값은 세 번째 쿼리와 비교하여 매우 다른 값을 볼 수 있습니다.
동일한 필드에 가입하려고 하면 인덱스를 사용하지 않는 것으로 나타납니다(TABLE Access라고 표시됨).해시 조인(HASH JOIN) 및 옵션 아래에는 FULL(전체)이라고 표시됩니다.
해시 조인(HASH JOIN)이 조인 술어에 (필요한) 인덱스를 사용하지 않기 때문입니다.
http://use-the-index-luke.com/sql/join/hash-join-partial-objects
언급URL : https://stackoverflow.com/questions/17666331/oracle-not-using-index-when-joining
'programing' 카테고리의 다른 글
기존 컨다 가상 환경의 파이썬 버전을 변경하는 방법은? (0) | 2023.09.12 |
---|---|
팬더 시리즈에서 입력된 숫자에 가장 가까운 값을 찾는 방법은 무엇입니까? (0) | 2023.09.12 |
UNC 경로에서 Get-ChildItem을 실행하면 Powershell에서는 작동하지만 배치 파일에서는 실행되지 않음 (0) | 2023.09.07 |
Oracle sql에서 새 줄 제거 (0) | 2023.09.07 |
마리아의 줄 위 자물쇠DB (0) | 2023.09.07 |