问题:
SQL语句运行时间主要消耗在TABLE ACCESS BY INDEX ROWID 索引回表扫描上,怎么优化?
模拟测试:
1.创建测试表
SYS@db11g> create table t1015 as select * from dba_objects;Table created.SYS@db11g> create index index_t1015_01 on t1015(object_type) online;Index created.
2.测试模拟,通过object_type列索引扫描,预估1037行,索引回表扫描TABLE ACCESS BY INDEX ROWID后36行,逻辑读217。
3.将索引回表谓词列添加到索引中,创建复合索引(object_type,object_id),消除或者减少索引回表的扫描次数,逻辑读降低为9。
SYS@db11g> create index index_t1015_02 on t1015(object_type,object_id) online;Index created.
总结:
SQL语句运行时间主要消耗在TABLE ACCESS BY INDEX ROWID 索引回表扫描上,通常通过将索引回表谓词列添加到索引中,创建复合索引,消除或者减少索引回表的扫描次数,提高语句查询效率。