Oracle中不使用索引和使用索引的效果比较分析

发表于:2013-4-03 09:43

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:lizhengnanhua    来源:51Testing软件测试网采编

  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));
declare
         maxrecords constant int:=180000;
         i int :=1009;
     begin
         for i in 120000..maxrecords loop
           insert 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选择了全表扫描而不是索引扫描。

31/3123>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号