Oracle中测试不使用索引和使用索引的效果比较分析,啥也不用说了,有图有真相。
1.创建测试数据库,再先批量插入数据:
SQL> create table StudentInformation(id number(20) not null primary key,name varchar2(10) not null,sex varchar2(2),address varchar2(20),hobby varchar(20));declaremaxrecords constant int:=180000;i int :=1009;beginfor i in 120000..maxrecords loopinsert into STUDENTINFORMATION("ID","NAME",SEX,ADDRESS,HOBBY)values(i,TO_CHAR("99"+i),"男","山东临沂","打篮球");end loop;dbms_output.put_line(" 成功录入数据! ");commit;end;如此插入大量数据,修改address,和hobby得到所需数据,如下图,共95000条数据。
2.测试环节:
创建索引:SQL> CREATE INDEX index_address_hobby ON STUDENTINFORMATION(address,hobby);分析表和索引:SQL>analyze table STUDENTINFORMATION compute statistics for table for all indexes for all columns; SQL> set autotrace traceonly;
SQL>set timing on;
SQL> select * from StudentInformation where hobby="打篮球"; Oracle选择了不使用索引而直接使用全表扫描,因为优化器认为全表扫描的成本更低,我们通过增加提示(hint)来强制使用索引:SQL> SELECT/**//*+ INDEX (StudentInformation index_address_hobby )*/ * FROM StudentInformation WHERE hobby="打篮球"; statistics部分的逻辑读取数(consistent gets)显示,使用索引导致的逻辑读取数是不使用索引导致的逻辑读的多近200个的逻辑读。因此,Oracle选择了全表扫描而不是索引扫描。
Oracle 10g EM登录后提示“数据库状态当前不可用可能是因为数据库的状态为装载或不装载”Oracle smon_scn_time 表 说明相关资讯 Oracle索引 Oracle不使用索引 Oracle使用索引
- Oracle跳跃式索引扫描测试 (08月09日)
- Oracle组合索引与回表 (08/07/2015 18:11:53)
- Oracle 索引基本原理 (04/12/2015 18:03:58)
| - 关于Oracle位图索引内部浅论 (09/17/2015 19:23:59)
- Oracle 索引的可见与隐藏(visible (07/18/2015 09:41:42)
- Oracle索引合并coalesce操作 (04/01/2015 20:21:34)
|
本文评论 查看全部评论 (0)