访问路径:通过哪种方式对数据进行访问. 全表扫描、索引扫描或ROWID获取数据。
- scott@orclpdb1:orclcdb> set autot trace
- scott@orclpdb1:orclcdb>
- scott@orclpdb1:orclcdb>
- scott@orclpdb1:orclcdb> select * from emp where empno=7369;
-
- 1 row selected.
-
-
- Execution Plan
- ----------------------------------------------------------
- Plan hash value: 2949544139
-
- --------------------------------------------------------------------------------------
- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
- --------------------------------------------------------------------------------------
- | 0 | SELECT STATEMENT | | 1 | 38 | 1 (0)| 00:00:01 |
- | 1 | TABLE ACCESS BY INDEX ROWID| EMP | 1 | 38 | 1 (0)| 00:00:01 |
- |* 2 | INDEX UNIQUE SCAN | PK_EMP | 1 | | 0 (0)| 00:00:01 |
- --------------------------------------------------------------------------------------
-
- Predicate Information (identified by operation id):
- ---------------------------------------------------
-
- 2 - access("EMPNO"=7369)
-
-
- Statistics
- ----------------------------------------------------------
- 0 recursive calls
- 0 db block gets
- 2 consistent gets
- 0 physical reads
- 0 redo size
- 961 bytes sent via SQL*Net to client
- 385 bytes received via SQL*Net from client
- 1 SQL*Net roundtrips to/from client
- 0 sorts (memory)
- 0 sorts (disk)
- 1 rows processed
-
- scott@orclpdb1:orclcdb>
- scott@orclpdb1:orclcdb> select * from test where object_id=100;
-
- 1 row selected.
-
-
- Execution Plan
- ----------------------------------------------------------
- Plan hash value: 3297604684
-
- ----------------------------------------------------------------------------------------------
- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
- ----------------------------------------------------------------------------------------------
- | 0 | SELECT STATEMENT | | 1 | 132 | 2 (0)| 00:00:01 |
- | 1 | TABLE ACCESS BY INDEX ROWID BATCHED| TEST | 1 | 132 | 2 (0)| 00:00:01 |
- |* 2 | INDEX RANGE SCAN | IDX_ID | 1 | | 1 (0)| 00:00:01 |
- ----------------------------------------------------------------------------------------------
-
- Predicate Information (identified by operation id):
- ---------------------------------------------------
-
- 2 - access("OBJECT_ID"=100)
-
-
- Statistics
- ----------------------------------------------------------
- 136 recursive calls
- 0 db block gets
- 408 consistent gets
- 33 physical reads
- 0 redo size
- 2686 bytes sent via SQL*Net to client
- 621 bytes received via SQL*Net from client
- 2 SQL*Net roundtrips to/from client
- 74 sorts (memory)
- 0 sorts (disk)
- 1 rows processed
-
- scott@orclpdb1:orclcdb>
索引范围扫描默认是从索引中最左边的叶子块开始,然后往右边的叶子块扫描(从小到大),当检查到不匹配数据的时候,就停止扫描。
- scott@orclpdb1:orclcdb> select * from test where object_id<100 order by object_id desc;
-
- 98 rows selected.
-
-
- Execution Plan
- ----------------------------------------------------------
- Plan hash value: 1069979465
-
- ---------------------------------------------------------------------------------------
- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
- ---------------------------------------------------------------------------------------
- | 0 | SELECT STATEMENT | | 94 | 12408 | 5 (0)| 00:00:01 |
- | 1 | TABLE ACCESS BY INDEX ROWID | TEST | 94 | 12408 | 5 (0)| 00:00:01 |
- |* 2 | INDEX RANGE SCAN DESCENDING| IDX_ID | 94 | | 2 (0)| 00:00:01 |
- ---------------------------------------------------------------------------------------
-
- Predicate Information (identified by operation id):
- ---------------------------------------------------
-
- 2 - access("OBJECT_ID"<100)
-
-
- Statistics
- ----------------------------------------------------------
- 1 recursive calls
- 0 db block gets
- 18 consistent gets
- 1 physical reads
- 0 redo size
- 14379 bytes sent via SQL*Net to client
- 711 bytes received via SQL*Net from client
- 8 SQL*Net roundtrips to/from client
- 0 sorts (memory)
- 0 sorts (disk)
- 98 rows processed
-
- scott@orclpdb1:orclcdb>
INDEX RANGE SCAN DESCENDING 表示索引降序范围扫描,从右往左扫描,返回的数据是降序显示的。
- scott@orclpdb1:orclcdb> create index idx_ownerid on test(owner,object_id);
-
- Index created.
-
- scott@orclpdb1:orclcdb> drop index idx_id;
-
- Index dropped.
-
- scott@orclpdb1:orclcdb> select * from test where object_id<100;
-
- 98 rows selected.
-
-
- Execution Plan
- ----------------------------------------------------------
- Plan hash value: 607061290
-
- ---------------------------------------------------------------------------------------------------
- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
- ---------------------------------------------------------------------------------------------------
- | 0 | SELECT STATEMENT | | 94 | 12408 | 42 (0)| 00:00:01 |
- | 1 | TABLE ACCESS BY INDEX ROWID BATCHED| TEST | 94 | 12408 | 42 (0)| 00:00:01 |
- |* 2 | INDEX SKIP SCAN | IDX_OWNERID | 94 | | 39 (0)| 00:00:01 |
- ---------------------------------------------------------------------------------------------------
-
- Predicate Information (identified by operation id):
- ---------------------------------------------------
-
- 2 - access("OBJECT_ID"<100)
- filter("OBJECT_ID"<100)
-
-
- Statistics
- ----------------------------------------------------------
- 59 recursive calls
- 0 db block gets
- 92 consistent gets
- 17 physical reads
- 0 redo size
- 14379 bytes sent via SQL*Net to client
- 466 bytes received via SQL*Net from client
- 8 SQL*Net roundtrips to/from client
- 6 sorts (memory)
- 0 sorts (disk)
- 98 rows processed
-
- scott@orclpdb1:orclcdb>
- scott@orclpdb1:orclcdb> select * from test order by object_id,owner;
-
- 73516 rows selected.
-
-
- Execution Plan
- ----------------------------------------------------------
- Plan hash value: 2007178810
-
- -----------------------------------------------------------------------------------
- | Id | Operation | Name | Rows | Bytes |TempSpc| Cost (%CPU)| Time |
- -----------------------------------------------------------------------------------
- | 0 | SELECT STATEMENT | | 73516 | 9476K| | 2570 (1)| 00:00:01 |
- | 1 | SORT ORDER BY | | 73516 | 9476K| 13M| 2570 (1)| 00:00:01 |
- | 2 | TABLE ACCESS FULL| TEST | 73516 | 9476K| | 399 (1)| 00:00:01 |
- -----------------------------------------------------------------------------------
-
-
- Statistics
- ----------------------------------------------------------
- 1 recursive calls
- 0 db block gets
- 1430 consistent gets
- 0 physical reads
- 0 redo size
- 4868592 bytes sent via SQL*Net to client
- 54537 bytes received via SQL*Net from client
- 4903 SQL*Net roundtrips to/from client
- 1 sorts (memory)
- 0 sorts (disk)
- 73516 rows processed
-
- scott@orclpdb1:orclcdb> create index idx_idowner on test(object_id,owner,0);
-
- Index created.
-
- scott@orclpdb1:orclcdb> select * from test order by object_id,owner;
-
- 73516 rows selected.
-
-
- Execution Plan
- ----------------------------------------------------------
- Plan hash value: 3870803568
-
- -------------------------------------------------------------------------------------------
- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
- -------------------------------------------------------------------------------------------
- | 0 | SELECT STATEMENT | | 73516 | 9476K| 1865 (1)| 00:00:01 |
- | 1 | TABLE ACCESS BY INDEX ROWID| TEST | 73516 | 9476K| 1865 (1)| 00:00:01 |
- | 2 | INDEX FULL SCAN | IDX_IDOWNER | 73516 | | 234 (1)| 00:00:01 |
- -------------------------------------------------------------------------------------------
-
-
- Statistics
- ----------------------------------------------------------
- 1 recursive calls
- 0 db block gets
- 11531 consistent gets
- 232 physical reads
- 0 redo size
- 4868592 bytes sent via SQL*Net to client
- 54316 bytes received via SQL*Net from client
- 4903 SQL*Net roundtrips to/from client
- 0 sorts (memory)
- 0 sorts (disk)
- 73516 rows processed
-
- scott@orclpdb1:orclcdb>
- scott@orclpdb1:orclcdb> drop index idx_ownername;
-
- Index dropped.
-
- scott@orclpdb1:orclcdb> create index idx_ownername on test(owner,object_name,0);
-
- Index created.
-
- scott@orclpdb1:orclcdb> select owner,object_name from test;
-
- 73516 rows selected.
-
-
- Execution Plan
- ----------------------------------------------------------
- Plan hash value: 3888663772
-
- --------------------------------------------------------------------------------------
- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
- --------------------------------------------------------------------------------------
- | 0 | SELECT STATEMENT | | 73516 | 2871K| 146 (0)| 00:00:01 |
- | 1 | INDEX FAST FULL SCAN| IDX_OWNERNAME | 73516 | 2871K| 146 (0)| 00:00:01 |
- --------------------------------------------------------------------------------------
-
-
- Statistics
- ----------------------------------------------------------
- 1 recursive calls
- 0 db block gets
- 5405 consistent gets
- 537 physical reads
- 0 redo size
- 3773365 bytes sent via SQL*Net to client
- 54307 bytes received via SQL*Net from client
- 4903 SQL*Net roundtrips to/from client
- 0 sorts (memory)
- 0 sorts (disk)
- 73516 rows processed
-
- scott@orclpdb1:orclcdb> create index idx_id on test(object_id);
-
- Index created.
-
- scott@orclpdb1:orclcdb> select object_name from test where object_id<100;
-
- 98 rows selected.
-
-
- Execution Plan
- ----------------------------------------------------------
- Plan hash value: 3297604684
-
- ----------------------------------------------------------------------------------------------
- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
- ----------------------------------------------------------------------------------------------
- | 0 | SELECT STATEMENT | | 94 | 3760 | 5 (0)| 00:00:01 |
- | 1 | TABLE ACCESS BY INDEX ROWID BATCHED| TEST | 94 | 3760 | 5 (0)| 00:00:01 |
- |* 2 | INDEX RANGE SCAN | IDX_ID | 94 | | 2 (0)| 00:00:01 |
- ----------------------------------------------------------------------------------------------
-
- Predicate Information (identified by operation id):
- ---------------------------------------------------
-
- 2 - access("OBJECT_ID"<100)
-
-
- Statistics
- ----------------------------------------------------------
- 1 recursive calls
- 0 db block gets
- 18 consistent gets
- 1 physical reads
- 0 redo size
- 2851 bytes sent via SQL*Net to client
- 476 bytes received via SQL*Net from client
- 8 SQL*Net roundtrips to/from client
- 0 sorts (memory)
- 0 sorts (disk)
- 98 rows processed
-
- scott@orclpdb1:orclcdb> create index idx_idname on test(object_id,object_name);
-
- Index created.
-
- scott@orclpdb1:orclcdb> select object_name from test where object_id<100;
-
- 98 rows selected.
-
-
- Execution Plan
- ----------------------------------------------------------
- Plan hash value: 3678957952
-
- -------------------------------------------------------------------------------
- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
- -------------------------------------------------------------------------------
- | 0 | SELECT STATEMENT | | 94 | 3760 | 2 (0)| 00:00:01 |
- |* 1 | INDEX RANGE SCAN| IDX_IDNAME | 94 | 3760 | 2 (0)| 00:00:01 |
- -------------------------------------------------------------------------------
-
- Predicate Information (identified by operation id):
- ---------------------------------------------------
-
- 1 - access("OBJECT_ID"<100)
-
-
- Statistics
- ----------------------------------------------------------
- 1 recursive calls
- 0 db block gets
- 9 consistent gets
- 1 physical reads
- 0 redo size
- 2851 bytes sent via SQL*Net to client
- 476 bytes received via SQL*Net from client
- 8 SQL*Net roundtrips to/from client
- 0 sorts (memory)
- 0 sorts (disk)
- 98 rows processed
-
- scott@orclpdb1:orclcdb> select object_name from test where object_id>100;
-
- 73415 rows selected.
-
-
- Execution Plan
- ----------------------------------------------------------
- Plan hash value: 252646278
-
- -----------------------------------------------------------------------------------
- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
- -----------------------------------------------------------------------------------
- | 0 | SELECT STATEMENT | | 73420 | 2867K| 142 (1)| 00:00:01 |
- |* 1 | INDEX FAST FULL SCAN| IDX_IDNAME | 73420 | 2867K| 142 (1)| 00:00:01 |
- -----------------------------------------------------------------------------------
-
- Predicate Information (identified by operation id):
- ---------------------------------------------------
-
- 1 - filter("OBJECT_ID">100)
-
-
- Statistics
- ----------------------------------------------------------
- 1 recursive calls
- 0 db block gets
- 5386 consistent gets
- 513 physical reads
- 0 redo size
- 3530801 bytes sent via SQL*Net to client
- 54686 bytes received via SQL*Net from client
- 4896 SQL*Net roundtrips to/from client
- 0 sorts (memory)
- 0 sorts (disk)
- 73415 rows processed
-
- scott@orclpdb1:orclcdb>
- scott@orclpdb1:orclcdb>
- scott@orclpdb1:orclcdb>
- scott@orclpdb1:orclcdb> create materialized view test_mv build immediate enable query rewrite
- 2 as select object_id,object_name from test;
-
- Materialized view created.
-
- scott@orclpdb1:orclcdb> select object_id,object_name from test;
-
- 73516 rows selected.
-
-
- Execution Plan
- ----------------------------------------------------------
- Plan hash value: 1627509066
-
- ----------------------------------------------------------------------------------------
- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
- ----------------------------------------------------------------------------------------
- | 0 | SELECT STATEMENT | | 73516 | 2799K| 129 (1)| 00:00:01 |
- | 1 | MAT_VIEW REWRITE ACCESS FULL| TEST_MV | 73516 | 2799K| 129 (1)| 00:00:01 |
- ----------------------------------------------------------------------------------------
-
-
- Statistics
- ----------------------------------------------------------
- 36 recursive calls
- 12 db block gets
- 5370 consistent gets
- 453 physical reads
- 1980 redo size
- 4184006 bytes sent via SQL*Net to client
- 54311 bytes received via SQL*Net from client
- 4903 SQL*Net roundtrips to/from client
- 2 sorts (memory)
- 0 sorts (disk)
- 73516 rows processed
-
- scott@orclpdb1:orclcdb>
因为物化视图TEST_MV 已经包含查询需要的字段,所以该SQL会直接访问物化视图TEST_MV.