• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

Oracle 索引扫描的4种类型

mysql 搞代码 4年前 (2022-01-09) 35次浏览 已收录 0个评论

通过唯一索引查找一个数值经常返回单个ROWID,存在UNIQUE 或PRIMARY KEY 约束(它保证了语句只存取单行)的话,Oracle经常实现唯一性

根据索引的类型与where限制条件的不同,有4种类型的Oracle索引扫描: 3,4可归一种
(1) 索引唯一扫描(index uniquescan)
(2) 索引范围扫描(index range scan)
(3) 索引全本文来源gao@dai!ma.com搞$代^码!网7扫描(index full scan)
(4) 索引快速扫描(index fast full scan)
(5) 索引跳跃扫描(INDEXSKIP SCAN)
一. 索引唯一扫描(index unique scan)
通过唯一索引查找一个数值经常返回单个ROWID,存在UNIQUE 或PRIMARY KEY 约束(它保证了语句只存取单行)的话,Oracle经常实现唯一性扫描
1 必须是通过唯一索引【UNIQUE】来访问数据;
2 通过唯一索引来访问数据时,每次返回的记录数必须是1条;
3 WHERE从句中必须要用等值【=】条件来过滤数据:
注意:表中某个字段是唯一的,如果该字段上的索引不是唯一的,那么CBO选择的将是通过INDEX RANGE SCAN的路径来访问数据。想要表达的是,真实场景下这种情况的确会存在,因为有些系统是通过应用程序来保证表中的字段唯一,,而并没有在表上对应的字段上通过创建唯一约束或者是唯一索引来保证数据的唯一性。那么,这样的话,将会导致CBO在选择执行计划的情况下,有可能会出现偏差。所以,对于这种情况下,即使应用程序可以保证数据的唯一性,最好还是在表上创建一个唯一索引比较稳妥。
例子:
SQL> create table t as select * from dba_objects where object_id is not null;
表已创建。
SQL> alter table t modify (object_id not null);
表已更改。
SQL> create unique index index_t on t(object_id);
索引已创建。
SQL> select * from t a where a.object_id=75780;
执行计划
———————————————————-
Plan hash value: 4119349871

——————————————————————————–

| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Tim

——————————————————————————–

| 0 | SELECT STATEMENT | | 1 | 207 | 2 (0)| 00:

| 1 | TABLE ACCESS BY INDEX ROWID| T | 1 | 207 | 2 (0)| 00:

|* 2 | INDEX UNIQUE SCAN | INDEX_T | 1 | | 1 (0)| 00:

——————————————————————————-

Predicate Information (identified by operation id):
—————————————————

2 – access(“A”.”OBJECT_ID”=75780)

统计信息
———————————————————-
6 recursive calls
0 db block gets
12 consistent gets
1 physical reads
0 redo size
1348 bytes sent via SQL*Net to client
404 bytes received via SQL*Net from client
1 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed

相关阅读:

介绍Oracle Virtual Index虚拟索引

Oracle中检查是否需要重构索引

Oracle case when索引 空值索引 位图索引

Oracle分析表和索引

Oracle主键约束自动建立索引问题


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Oracle 索引扫描的4种类型

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址