关于索引的使用模式(r3笔记56天)
时间:2022-05-04
本文章向大家介绍关于索引的使用模式(r3笔记56天),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
索引的使用对于一些庞大的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能够筛查出很小比例的数据。
- Spring Cloud Edgware新特性之九:Sleuth使用MQ方式整合Zipkin
- Linux 基础知识
- Spring Cloud Edgware新特性之八:Zuul回退的改进
- Install Django Nginx uWSGI
- Spring Cloud Edgware新特性之七:可选的EnableDiscoveryClient注解
- 【LEETCODE】模拟面试-46. Permutations
- CentOS6 Upgrade Python
- Emacs setup for Go Development
- 【LEETCODE】模拟面试-39. Combination Sum
- Docker系列教程12-使用Maven插件构建Docker镜像
- Linux nohup 用法
- 【LEETCODE】模拟面试-84-Largest Rectangle in Histogram
- Docker系列教程11-使用Nexus管理Docker镜像
- Mac 配置终端环境
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 第四章--第二节:类
- 教育平台项目后台管理系统:介绍与搭建
- Python办公自动化之Excel做表自动化:全网最全,看这一篇就够了!
- Java学习笔记-spring-Bean实例化
- Java学习笔记-spring-Bean作用于
- 教育平台项目后台管理系统:课程信息模块
- 教育平台项目后台管理系统:课程内容模块
- 100 个 Python 小例子
- Entity Framework初体验
- Entity Framework 小知识(一)
- 教育平台项目前端:Vue.js 入门
- Entity Framework 约定
- 浏览器中的跨域问题与 CORS
- Entity Framework 小知识(二)
- 教育平台项目前端:Vue.js 高级