안녕하세요. 궁금한것이 있어 질문을 드려봅니다.
ORACLE에서 특정 테이블에 인덱스가 생성이 되어있고.
특정 SQL 수행 시 CPU 사용량이 증가하면, 이때에는 어떻게 해결을 해야 하나요 ?
1. 인덱스를 타는데도 불구하고 CPU 사용량이 증가.
2. 인덱스가 생성되어 있음에도 불구 하고, 인덱스를 타지 않음.
그리고 추가적으로 제가 궁금한게 있는데요,
번번히
SELECT A, B, C FROM TEST_TABLE WHERE DEL_YN = 'N'
이런 쿼리가 실행이 됩니다. 이런 경우에도 DEL_YN ='Y' 인 로우수가 엄청 많을덴데요,
이런경우에는 또 어떻게 해결을 해야 하나요?
읽어주셔서 감사합니다.
안녕하세요. 먼저 답변 달아주셔서 대단히 감사드립니다.
인덱스 풀스캔을 태워준다는 말씀이, CPU 사용량이 증가할 때 말씀이신가요 ?
=> 데이터가 100건인데 인덱스를 태워야하는 대상이 100개면 인덱스는 더 느림 그래서 인덱스풀스캔으로 i/o 로 8개 블록 or 16개 블록단위로 읽는게 더빠르다라고 판단함으로 인덱스를 단순히 사용하는게 비효율적이다라는 판단
데이터가 많다고 하셨는데요, 그럼 이때 강제적으로 힌트절을 주어서
인덱스를 타게 해주는건가요 ?
=> 데이터가 많으면 강제로 인덱스를 줘봤자 index full scan이 탈꺼에요.
인덱스는 데이터가 많은것들중에 식별할수 있는 특정 부분의 개체를 빠르게 읽는다라는 의미
그런데 읽어야하는 그룹이 데이터 양과 읽어야하는 양과 동일하면 인덱스는 필요가없음.
인덱스의 개념을 공부하시면될듯
전반적으로 인덱스의 동작원리를 이해하셔야만 합니다.
막연한 질문에 대한 답은 "그때 그때 달라요" 입니다.
막연한 질문보다는 실제 사례를 매우 구체적으로 제시해 주셔야 합니다.
우선, 인덱스에 대한 일반적인 설명을 드리자면
인덱스는 많은 자료중 극히 일부 적은 자료를 찾을 때 유리합니다.
많은 자료 중 대부분의 자료 처리시엔 풀스캔이 유리하구요.
많은 자료 중 일부분의 자료이지만 이마저도 절대량이 많을 경우엔 인덱스도 불리하고 풀스캔도 불리합니다.
이 경우엔 파티션을 고려합니다.
힌트 사용에 대해서는
옵티마이저가 여러가지를 토대로 알아서 판답합니다.
그런대도 틀린 판단을 할 가능성은 잇죠.
이 때 옵티마이저가 틀렷다는걸 알아야만 합니다.
뭐가 틀린지도 모르고 힌트를 사용해서는 안됩니다.
즉, 전반적인 이해를 바탕으로 힌트를 사용해야 합니다.