TABLE ACCESS BY INDEX ROWID前面的星号
来源:互联网 发布:淘宝白酒真假 编辑:程序博客网 时间:2024/05/20 11:21
<pre name="code" class="sql">SQL> create table test as select * from dba_objects;Table created.select * from test where object_id=10 and OWNER='SYS';SQL> select count(*) from test where object_id=10; COUNT(*)---------- 1SQL> select count(*) from test; COUNT(*)---------- 74443模拟插入object_id=10 and OWNER='SYS'的记录SQL> select object_id,owner,count(*) from test2 group by object_id,owner having object_id=10; OBJECT_ID OWNER COUNT(*)---------- ------------------------------ ---------- 10 TEST 72636 10 SYS 10003SQL> select count(*) from test2; COUNT(*)---------- 1578831SQL> create index test2_idx1 on test2(object_id);索引已创建。分析下表:BEGIN DBMS_STATS.GATHER_TABLE_STATS(ownname => 'TEST', tabname => 'TEST2', estimate_percent => 30, method_opt => 'for all columns size repeat', no_invalidate => FALSE, degree => 8, cascade => TRUE);END;SQL> select * from table(dbms_xplan.display_cursor(null,null,'ALLSTATS LAST'));PLAN_TABLE_OUTPUT--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------SQL_ID gmv066f6cfyhd, child number 0-------------------------------------select * from test2 where object_id=10 and owner='SYS'Plan hash value: 3497718064-------------------------------------------------------------------------------------------------------------| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers | Reads |-------------------------------------------------------------------------------------------------------------| 0 | SELECT STATEMENT | | 1 | | 10003 |00:00:00.60 | 2628 | 1297 ||* 1 | TABLE ACCESS BY INDEX ROWID| TEST2 | 1 | 1 | 10003 |00:00:00.60 | 2628 | 1297 ||* 2 | INDEX RANGE SCAN | TEST2_IDX1 | 1 | 22 | 82639 |00:00:00.15 | 830 | 163 |-------------------------------------------------------------------------------------------------------------Predicate Information (identified by operation id):--------------------------------------------------- 1 - filter("OWNER"='SYS') 2 - access("OBJECT_ID"=10)已选择20行。可以看到object_id=10的记录数为82639行,回表后过滤OWNER='SYS'后为10003行,此时有10003个rowid需要回表逻辑读为:SQL> select * from test2 where object_id=10 and owner='SYS' 2 ;已选择10003行。执行计划----------------------------------------------------------Plan hash value: 3497718064------------------------------------------------------------------------------------------| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |------------------------------------------------------------------------------------------| 0 | SELECT STATEMENT | | 1 | 96 | 24 (0)| 00:00:01 ||* 1 | TABLE ACCESS BY INDEX ROWID| TEST2 | 1 | 96 | 24 (0)| 00:00:01 ||* 2 | INDEX RANGE SCAN | TEST2_IDX1 | 22 | | 3 (0)| 00:00:01 |------------------------------------------------------------------------------------------Predicate Information (identified by operation id):--------------------------------------------------- 1 - filter("OWNER"='SYS') 2 - access("OBJECT_ID"=10)统计信息---------------------------------------------------------- 1 recursive calls 0 db block gets 2628 consistent gets 0 physical reads 0 redo size 393766 bytes sent via SQL*Net to client 7741 bytes received via SQL*Net from client 668 SQL*Net roundtrips to/from client 0 sorts (memory) 0 sorts (disk) 10003 rows processed创建组合索引后:SQL> create index test2_idx2 on test2(object_id,owner);SQL> select * from table(dbms_xplan.display_cursor(null,null,'ALLSTATS LAST'));PLAN_TABLE_OUTPUT--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------SQL_ID gmv066f6cfyhd, child number 0-------------------------------------select * from test2 where object_id=10 and owner='SYS'Plan hash value: 3385680830-------------------------------------------------------------------------------------------------------------| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers | Reads |-------------------------------------------------------------------------------------------------------------| 0 | SELECT STATEMENT | | 1 | | 10003 |00:00:00.08 | 1488 | 27 || 1 | TABLE ACCESS BY INDEX ROWID| TEST2 | 1 | 1 | 10003 |00:00:00.08 | 1488 | 27 ||* 2 | INDEX RANGE SCAN | TEST2_IDX2 | 1 | 22 | 10003 |00:00:00.02 | 693 | 27 |-------------------------------------------------------------------------------------------------------------Predicate Information (identified by operation id):--------------------------------------------------- 2 - access("OBJECT_ID"=10 AND "OWNER"='SYS')此时直接索引过滤后顺下10003行记录,不需要回表在过滤数据。结论:看到TABLE ACCESS BY INDEX ROWID前面有*,说明索引扫描返回rowid后,还要在表上进行过滤,比如上面索引扫描后返回了82639 个rowid,在表上过滤后只顺下10003个,这样就可以通过创建组合索引来减少回表的rowid.
0 0
- TABLE ACCESS BY INDEX ROWID前面的星号
- table access by index rowid
- table access by index rowid
- Oracle TABLE ACCESS BY INDEX ROWID 说明
- oracle TABLE ACCESS BY INDEX ROWID 你不知道的索引回表-开发系列(三)
- oracle index-by table的遍历
- INDEX BY TABLE 记录索引表
- PLSQL collection 示例 之 index-by table
- PLSQL collection 示例 之 index-by table
- table of number index by varchar2(100)
- oracle常用的复合数据类型 : BULK COLLECT和is table of table_name%rowtype index by
- dump index的同时对rowid存储的解析
- 函数传参数的时候参数前面加一个星号*或者两个星号**
- 学习TYPE IS TABLE OF VARCHAR2 INDEX BY VARCHAR
- type … is table of number index by binary_integer
- Oracle index by table(Associative array) used in PostgreSQL
- Table index
- Access里的Alter Table
- FreeMarker整合Spring 3
- 2014年腾讯游戏实习生面试体验
- 汇编入门学习笔记 (三) —— 第一个程序
- pthread线程编程常用API
- Unity3d Resources TextAsset 文本
- TABLE ACCESS BY INDEX ROWID前面的星号
- 用位操作实现的数据交换
- POJ 3905 Perfect Election(简单2-SAT)
- 天降噩耗
- jvm基础理解
- 解决VTune错误PMU resources currently being used by another profiling tool or process
- java web web.xml 中的url-pattern 和 springMVC
- UVA - 540 - Team Queue
- Struts2 - OGNL表达式和Struts2标签库