실행 계획에 따르면 두 쿼리가 다릅니다. 예를 들어, 쿼리 :
select count(*) from USER
저를 줄 것이다 : 당신이 볼 수 있듯이
INDEX (FAST FULL SCAN) 3.0 3 453812 3457 1 TPMDBO USER_PK FAST FULL SCAN INDEX (UNIQUE) ANALYZED
, 우리는 그 테이블의 기본 키입니다 USER_PK를 기록했다.
나는 종류가 아닌 인덱스 열을 기준으로하는 경우 :
select count(*) from USER ORDER BY FIRSTNAME --No Index on FIRSTNAME
내가 얻을 것이다 : 우리는 전체 테이블 스캔 (더 높은 노드 비용)
을 한 의미
TABLE ACCESS (FULL) 19.0 19 1124488 3457 24199 1 TPMDBO USER FULL TABLE ANALYZED 1
이미 인덱스 인 기본 키별로 정렬하면 오라클은 색인을 사용하여 정렬을 수행 할 수 있습니다.
INDEX (FAST FULL SCAN) 3.0 3 453812 3457 13828 1 TPMDBO USER_PK FAST FULL SCAN INDEX (UNIQUE) ANALYZED
첫 번째 실행 계획과 매우 비슷합니다.
그럼, 귀하의 질문에 대한 답변은 절대적으로 아닙니다 - 그들은 동일하지 않습니다. 그러나 오라클이 이미 찾고있는 색인에 의한 정렬은 아마도 동일한 쿼리 계획을 초래할 것입니다.
그들은 다릅니다! –
먼저 쿼리 계획을 확인 했습니까? 그런 작은 차이점이 있다면 분석기를 가지고있을 것입니다. 정렬이 발생했는지 여부를 알려줍니다. – artificialidiot
COUT 또는 SUM과 같은 모든 교환 가능한 집계 함수에서 순서 절을 제거하는 것은 불필요하기 때문에 간단합니다. –