납득이 안가는 실행계획이네요 0 6 1,311

by 비디는껌 [2012.06.01 16:33:09]



select ename, hiredate from emp;

cost: 3 bytes: 196 cardinality : 14


SELECT ename, hiredate FROM emp WHERE ename like '%%%';


cost: 3 bytes: 14 cardinality : 1




딱봐도 위에 쿼리가 효율적일거 같은데 어떻게 조건절이 붙은 아래쿼리가 효율적일수 있는거죠??

도와주세요!

by 손님 [2012.06.01 16:45:40]

cardinality가 뭘 의미하는지 모르시나요??

by 손님 [2012.06.01 16:54:36]

딱봐도 위에 쿼리가 효율적일거 같은데 어떻게 조건절이 붙은 아래쿼리가 효율적일수 있는거죠??

==> 도대체 어떻게 보길래 위에 쿼리가 좋아 보입니까??
   기초부터 다시 공부하삼

by 비디는껌 [2012.06.01 17:23:09]

이해가 안가네요

by 손님 [2012.06.01 17:27:06]

위에 쿼리든 아래 쿼리든 테이블 풀스캔이겠져?

위에 쿼리 14*14 ==> 196bytes
아래 쿼리 14*1 ==> 14bytes

즉 위에 쿼리는 14개 전체 로우 리턴...아래 쿼리는 1로우 리턴

by 마농 [2012.06.01 17:54:48]

학습 순서가 틀렸네요.
실행계획은 이해하는게 아닙니다.
실행계획은 SQL 처리 절차를 이해하기 위한 참고 수단일 뿐.
쿼리 수행의 원리를 먼저 이해하셔야죠.


쿼리수행의 원리는 다음을 우선 공부하셔야 하고
1. 스캔방법 : 풀스캔, 인덱스스캔 등
2. 스캔방법에 따른 장단점
3. 조인방법 : NL, HASH, SORT_MERGE 등
4. 조인방법에 따른 장단점
단순 우위 비교가 아닌 장점과 단점을 모두 이해하고
상황에 따른 취사 선택 능력을 길러야 합니다.


실행계획의 숫자만 보고 판단하시면 안됩니다.
실행계획의 숫자는 100% 믿을 수는 없습니다.
예를 들면 위 쿼리를 제가 테스트 해보니.(10g)
'%'를 하나만 주었을때는 1번쿼리와 동일한 Byte와 Card 가 나오며
'%'를 두개이상 주었을때는 2번쿼리와 동일한 Byte와 Card 가 나오네요
'%'를 하나 주나 두개 주나 결과는 전체 건수로 동일하므로
어느것이 더 효율적이다 판단할 수 없습니다.
같은 결과라면 조건 체크를 안하는 1번이 당연 효율적이겠지요.


by 비디는껌 [2012.06.01 17:56:43]

감사합니다!!!
학습순서대로 학습하겠습니다
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입