강사님께서 어제 급 질문을 던지셨다.
테이블을 생성한 후 select * from t1 sort 해서 출력되는 값이 정렬이 되지 않는데 index를 생성해도 정렬이 되지 않았다.
그런데 primary key를 생성하니 정렬이 된다. 어떤 이유에서 그럴까?
이게 질문이었는데.. sort ?? sort라는 키워드는 처음 들어본다. order by도 아니고 sort가 머지??..ㅋ
예문은 다음과 같다.
원인은 다음과 같이 유추된다.
SQL> explain plan for select * from t1 sort;
Explained.
SQL> select * from table(dbms_xplan.display(null,null,'advanced'));
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 3498458541
------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 3 | 39 | 1 (0)| 00:00:01 |
| 1 | INDEX FULL SCAN | T1_NO_IDX | 3 | 39 | 1 (0)| 00:00:01 |
------------------------------------------------------------------------------
Query Block Name / Object Alias (identified by operation id):
-------------------------------------------------------------
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Outline Data
-------------
/*+ BEGIN_OUTLINE_DATA INDEX(@"SEL$1" "SORT"@"SEL$1" ("T1"."NO")) OUTLINE_LEAF(@"SEL$1") ALL_ROWS
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
OPTIMIZER_FEATURES_ENABLE('10.2.0.1')
IGNORE_OPTIM_EMBEDDED_HINTS
END_OUTLINE_DATA
*/
Column Projection Information (identified by operation id):
-----------------------------------------------------------
1 - "SORT"."NO"[NUMBER,22]
Note
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
-----
- dynamic sampling used for this statement
35 rows selected.
SQL> explain plan for select * from t1;
Explained.
SQL> select * from table(dbms_xplan.display(null,null,'advanced'));
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 3498458541
------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 3 | 39 | 1 (0)| 00:00:01 |
| 1 | INDEX FULL SCAN | T1_NO_IDX | 3 | 39 | 1 (0)| 00:00:01 |
------------------------------------------------------------------------------
Query Block Name / Object Alias (identified by operation id):
-------------------------------------------------------------
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Outline Data
-------------
/*+ BEGIN_OUTLINE_DATA INDEX(@"SEL$1" "T1"@"SEL$1" ("T1"."NO")) OUTLINE_LEAF(@"SEL$1") ALL_ROWS
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
OPTIMIZER_FEATURES_ENABLE('10.2.0.1')
IGNORE_OPTIM_EMBEDDED_HINTS
END_OUTLINE_DATA
*/
Column Projection Information (identified by operation id):
-----------------------------------------------------------
1 - "T1"."NO"[NUMBER,22]
Note
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
-----
- dynamic sampling used for this statement
35 rows selected.
그렇다..
dbms_xplan 패키지를 사용하여 실행계획을 확인해 보면
sort가 t1 테이블의 alias로 사용된 걸 알수있다..;;;