前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >关于索引的使用模式(r3笔记56天)

关于索引的使用模式(r3笔记56天)

作者头像
jeanron100
发布2018-03-15 10:04:53
5370
发布2018-03-15 10:04:53
举报

索引的使用对于一些庞大的sql语句来说,大多数的调优场景中有种雪中送炭的感觉,如果几百万,几千万的数据筛查,全表扫描将会是一个极度消耗资源的过程,但是如果走了索引扫描,可能性能会提升成百上千倍。索引的访问模式有以下几种,其实有些时候对有些细节还是不太注意。对不同的使用场景可以有一定的针对性,效率也许更高。 可以创建如下的测试表来简单归纳一些。

SQL> create table a as select object_id,object_name,object_type from  dba_objects;
Table created.
SQL> desc a
 Name                                                   Null?    Type
 ----------------------------------------------------- --------  ------------------------------------
 OBJECT_ID                                                       NUMBER
 OBJECT_NAME                                                     VARCHAR2(128)
 OBJECT_TYPE                                                     VARCHAR2(19)
SQL> analyze table a compute statistics;
Table analyzed.
SQL> create unique index ind_a on a(object_id);  --我们创建了唯一性索引
Index  created.
SQL> set autot traceonly exp

查看执行计划,使用了index uniqe scan,这种方式是最快的索引访问模式。

我们只输出索引列的值,结果预想可以走索引扫描,但是结果走了全表扫描,来看看为什么。

我们只需要简单的修改一些列的属性,就可以排除null的干扰,走索引扫描,这个时候走的是快速索引全扫描。这种索引扫描因为不会涉及到排序,所以扫描要快一些。

如果要对索引列作排序,这个时候可以使用索引全扫描,通过下面的执行计划可以看到快速扫描和全扫描的差别。

如果涉及到索引列的区间值,可以使用区间扫描,比如我们常用的between条件就会走区间扫描。

对于跳跃索引扫描,可能会略微难懂一些。 可以举一个简单的例子来模拟一下。我们创建一个表a,然后让一些字段的数据分布倾斜。

SQL>  drop index ind_a;
Index dropped.
SQL> create index ind_a on  a(object_type,object_id,object_name);
Index created.
SQL> analyze table  a compute statistics for all indexed columns;
Table analyzed.
SQL>  select object_id from a where object_type='INDEX PARTITION' and rownum<2;   --我们随便抽取出一条记录来做测试。Object_id为5639
 OBJECT_ID
----------
      5639

可以看到数据的分布情况如下。

这个时候使用object_id来做查询,就会走跳跃索引扫描。尽管索引列是(object_type,object_id,object_name),但是通过object_id能够筛查出很小比例的数据。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2014-11-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 杨建荣的学习笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档