안녕하세요?
질문하나 드리겠습니다.
실행계획을 보다보니 cost 값이 있던데요...
이 cost에 대해서 간략하게나마 설명을 부탁드려도 될련지요?
그리고 cost는 낮은게 무조건 좋은건가요?
그렇다면 쿼리조정할때도 무조건 cost가 낮게만 쿼리를 만들면 되는건
가요? 물론 그렇진 않겠지만요...
고수님들의 cost에 관한 일반적인 설명 듣고싶습니다.
무식한 질문 죄송...
cost는 예상 비용입니다.
IO횟수...IO의 형태...연산에 의한 발생량 등을 고려해서 옵티마이저 계산하는
예상되는 cost 비용인것입니다.
예상 하는 것이니깐 실제 소요되는시간과 cost는 대체로 비례하긴 하지만
꼭 들어 맞는것은 아닙니다.
cost가 높게 나온 쿼리가 실제로는 더 빠를수도 있습니다.
힌트라는 것도 옵티마이저가 다른 방향으로 갈 수 있게 이끄는 것이죠.
또한 옵티마이저 정책이 all_rows 냐 first_rows냐에 따른 cost도 고려해봐야할 것입니다.
그럼
저도 이제껏 코스트에 대해 모르는 부분이 많습니다만, 간단히 경험을 말씀드리면, 코스트가 높더라도 빠른 경우는 있더군요.
실행계획이 NESTED_LOOPS가 아닌 HASH_JOIN으로 풀린 경우는 대체적으로 코스트가 높았습니다. 하지만, 속도는 빨랐지요. 하지만, 얼마 전에 HASH_JOIN가 너무 많이 쓰여서 다운된 쿼리가 발견됐습니다.
코스트가 반드시 속도와 비례한다고 말씀드리긴 힘들것 같지만, 속도와 함께 입출력량까지 고려한다면 대충 비례하는 것 같습니다.
자주 사용되지도 않고 비교적 간단한 쿼리라면 코스트가 좀 높더라도 빠른, 자주 사용되고 복잡한 쿼리라면 코스트를 고려해서 작성하는게 좋지 않을까... 싶네요.